Задача:
Давлен массив, в котором количество отрицательных элементов равно количеству положительных элементов (расположены в произвольном порядке). Поменяйте местами первый минус и первый плюс, затем второй минус и второй плюс и так далее.(Использование методов(кроме 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
Замена соответствующих отрицательных и положительных элементов в массиве с сохранением постоянного порядка в соответству ⇐ JAVA
Программисты JAVA общаются здесь
1760743448
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[i] = scn.nextDouble();
}
System.out.println("Elements now:");
for(int i = 0; i < n; i++) System.out.printf("%f ", a[i]);
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[i] > 0) pairs++;
while(pairs > 0) {
for(int i = 0; i < n; i++) {
if(a[i] > 0 && posCnt == k - 1) {pos = i; break;}
else if(a[i] > 0) posCnt++;
}
for(int i = 0; i < n; i++) {
if(a[i] < 0 && negCnt == k - 1) {neg = i; break;}
else if(a[i] < 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[i]);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79793393/swapping-corresponding-negative-and-positive-elements-in-an-array-while-keeping[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия