Angrenzende Bits

Techx

Mitglied
Hallo zusammen, leider bin ich bei einer Aufgabe hängen geblieben und weiß nicht mehr weiter.

Mein Problem ist, dass wenn ich zum Beispiel 4 eingebe, ich die Ausgabe 8 erhalten sollte und nicht 6. Ich weiß nicht, wie oder was ich ändern muss. Über Lösungsvorschläge und Erläuterungen würde ich mich sehr freuen. Danke schön!

Die Aufgabe:
Bildschirm­foto 2022-12-27 um 02.39.35.png
Java:
import java.util.*;

public class Main {

    static Scanner scn = new Scanner(System.in);

    static {
        System.out.print("Put a number: ");
    }

    static int zahl = scn.nextInt();


    static int mindestUmkehr(int n, char[] s1, char[] s2) { // Das Array


        int count = zahl;

        for (int i = 0; i < n - 1; i++) {
            if (s1[i] != s2[i]) {

                if (s1[i] == '1') {
                    s1[i] = '0';
                } else {
                    s1[i] = '1';
                }
                if (s1[i + 1] == '1') {
                    s1[i + 1] = '0';
                } else {
                    s1[i + 1] = '1';
                }

                count++;
            }
        }

        if (String.copyValueOf(s1).equals(
                String.copyValueOf(s2))) {


        }


        return count;
    }

    public static void main(String[] args) {
        int n = 3;
        String s1 = "0101";
        String s2 = "1111";
        System.out.print(
                mindestUmkehr(n, s1.toCharArray(), s2.toCharArray()) + "\n"); //1. String in array umgewandelt = [0,1,0,1]...
    }
}

}
}
 

mihe7

Top Contributor
Wenn ich mir den Code ansehe, musst Du schon sehr verzweifelt sein :p

Da sollten wir vielleicht nochmal von vorne anfangen.

Wie viele Binärkombinationen gibt es denn bei n Bits und wie könntest Du alle Kombinationen auflisten?
 

KonradN

Super-Moderator
Mitarbeiter
Und bitte: Wie kommst Du auf die Idee, den Pfad der Ausführung in
  • static block
  • initialization of static variable
  • main method
aufzuteilen?

Ist das der Kurs "Obfuscation für Anfänger"?

Sorry, aber kann man sich das Leben schwerer machen?

Aber abgesehen davon: Der HInweis von @mihe7 noch einmal etwas ausführlicher:

Es ist existenziell, dass Du Dir Gedanken machst, was das Programm eigentlich machen soll. Also geh das doch erst einmal selbst mit Stift und Papier durch!

Wie viele Kombinattionen gibt es mit nur einem Bit?
Wie viele gibt es mit zwei Bits?
Wie viele gibt es mit drei Bits? (Tipp: Das ist als Beispiel schon gegegen - mit verdeutlichung, welche Paare von Interesse sind und welche nicht)
...
Geh das von Hand durch! Dazu braucht es nur Stift und Papier!

Und während Du das mit Stift und Papier machst: Überlege Dir genau, was Du genau machst. Das kannst Du in Anweisungen aufschreiben. Diese müssen so genau sein, dass Du diese Anweisungen jemandem geben kannst und der das dann machen kann (ohne die Aufgabe zu kennen!)
 

Oben