Gegeben sei ein Array, in dem die Anzahl der negativen Elemente gleich der Anzahl der positiven Elemente ist (in beliebiger Reihenfolge angeordnet). Vertauschen Sie das erste Negativ und das erste Positiv, dann das zweite Negativ und das zweite Positiv usw. (Die Verwendung von Methoden (außer Main) und die Erstellung anderer Arrays und Sammlungen ist verboten. Die Sprache ist Java).
I. Wenn uns zum Beispiel ein Array {1, 2, 3, -4, 5, 6, -7, -8, -9, -10} gegeben wird, müssen wir es in {-4, -7, -8, 1, -9, -10, 2, 3, 5, 6} umwandeln.
Ich habe versucht, das Problem zu lösen, indem ich über das Array iterierte und das k-te positive Element, das entdeckt wurde, mit dem k-ten vertauschte negatives Element. Ich habe eine Ganzzahlvariable verwendet, um den k-Parameter im Auge zu behalten.
Der Code funktioniert gut für Arrays der Form {a, -b, c, -d, ...}, wobei a, b, c, d usw. alle positive oder alle negative Zahlen sind. Z.B. Es gibt {1, -2, 3, -4, 5, -6} für {-2, 1, -4, 3, -6, 5} aus. Aber sonst geht es kaputt. Ich habe auch andere Lösungen ausprobiert, wie z. B. den Überblick darüber zu behalten, wie viele positive Variablen übersprungen werden sollen oder wo, aber es ist unmöglich, dies angemessen zu erreichen, ohne mindestens ein weiteres Array zu erstellen.
Hier ist der Code, den ich ausgeführt habe:
Code: Select all
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]);
}
}
 Mobile version
 Mobile version