Замена соответствующих отрицательных и положительных элементов в массиве с сохранением постоянного порядка в соответствуJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Замена соответствующих отрицательных и положительных элементов в массиве с сохранением постоянного порядка в соответству

Сообщение Anonymous »

Задача:

Давлен массив, в котором количество отрицательных элементов равно количеству положительных элементов (расположены в произвольном порядке). Поменяйте местами первый минус и первый плюс, затем второй минус и второй плюс и так далее.(Использование методов(кроме Main) и создание других массивов запрещено. Язык - java).

I. например, если нам дан массив {1, 2, 3, -4, 5, 6, -7, -8, -9, -10}, нам нужно преобразовать его в {-4, -7, -8, 1, -9, -10, 2, 3, 5, 6}.
Я пробовал решить эту задачу, перебирая массив и меняя местами k-й положительный элемент, отмеченный k-м. отрицательный элемент. Я использовал целочисленную переменную, чтобы отслеживать параметр k.
Код отлично работает для массивов вида {a, -b, c, -d, ...}, где a, b, c, d и т. д. — все положительные или все отрицательные числа. Например, он выводит {1, -2, 3, -4, 5, -6} для {-2, 1, -4, 3, -6, 5}. Но все портит иначе. Я пробовал и другие решения, например отслеживать, сколько положительных переменных нужно пропустить или где, но это невозможно сделать адекватно, не создав хотя бы еще один массив.
Вот код, который я запустил:
import java.util.Scanner;

public class Main1 {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
System.out.println("Size:");
int n = scn.nextInt();
double[] a = new double[n];
System.out.println("Elements:");
for(int i = 0; i < n; i++) {
a = scn.nextDouble();
}

System.out.println("Elements now:");
for(int i = 0; i < n; i++) System.out.printf("%f ", a);
System.out.println();

int pairs = 0, k = 1, pos = -1, neg = -1, posCnt = 0, negCnt = 0;
for(int i = 0; i < n; i++) if(a > 0) pairs++;
while(pairs > 0) {
for(int i = 0; i < n; i++) {
if(a > 0 && posCnt == k - 1) {pos = i; break;}
else if(a > 0) posCnt++;
}
for(int i = 0; i < n; i++) {
if(a < 0 && negCnt == k - 1) {neg = i; break;}
else if(a < 0) negCnt++;
}
a[pos] = a[pos] + a[neg];
a[neg] = a[pos] - a[neg];
a[pos] = a[pos] - a[neg];
posCnt = 0;
negCnt = 0;
pairs--;
k++;
}
System.out.println("Elements after:");
for(int i = 0; i < n; i++) System.out.printf("%f ", a);
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... le-keeping
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»