Vertauschen entsprechender negativer und positiver Elemente in einem Array unter Beibehaltung der konstanten ReihenfolgeJava

Java-Forum
Anonymous
 Vertauschen entsprechender negativer und positiver Elemente in einem Array unter Beibehaltung der konstanten Reihenfolge

Post by Anonymous »

Das Problem:

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]);
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post