Gray-Code: Zyklische Verschiebung und XOR

C++ Hard loops

Aufgabe «Gray-Code: Zyklische Verschiebung und XOR»

Gegeben ist eine ganze Zahl N (1 ≤ N ≤ 20). Generieren Sie eine Folge von 2^N Zahlen, die den Gray-Code für die Zahlen von 0 bis 2^N-1 darstellen. Führen Sie dann für jede Zahl in dieser Folge eine zyklische Verschiebung ihrer binären Darstellung um 1 Bit nach rechts durch und wenden Sie die XOR-Operation mit der ursprünglichen Zahl an. Geben Sie die resultierenden Werte in aufsteigender Reihenfolge der ursprünglichen Zahlen aus. Verwenden Sie nur Schleifen und Bitoperationen, vermeiden Sie Rekursion.

Eingabeformat

Eine ganze Zahl N (1 ≤ N ≤ 20).

Ausgabeformat

2^N ganze Zahlen, durch Leerzeichen getrennt, jede in einer neuen Zeile.

Beispiele

Beispiel 1

EINGABE
3 1 2 3 4 5 6 7 8 9
AUSGABE
15

Beispiel 2

EINGABE
1 5
AUSGABE
1 2 4 8 16

Beispiel 3

EINGABE
5 1 2 3 4 5 2 3
AUSGABE
12

Beispiel 4

EINGABE
3
AUSGABE
1 0 0 2 0 4 4 6
main.cpp