C / C ++ Puzzle: Um Werte von 1..15 15..1 mit einer einzigen for-Schleife zu drucken [geschlossen]

8

Es wurde von meinem Kollegen gegeben, um die Werte 1 2 3 4 .... 15 15 ..... 4 3 2 1 mit nur eins für die Schleife , keine Funktionen , keine goto-Anweisungen und zu drucken ohne die Verwendung von bedingten Anweisungen oder ternären Operatoren .

Also habe ich Typecasting verwendet, um es zu lösen, aber es ist keine exakte Lösung, da 15 nicht zweimal gedruckt wird.

%Vor%

Ausgabe : 1 2 3 4 ... 15 14 13 .... 2 1

Irgendwelche alternativen Lösungen?

    
Shubham 11.04.2012, 11:44
quelle

11 Antworten

32

Sie können eine Schleife von 1 bis 30 durchführen und dann die Tatsache verwenden, dass (i / 16) für Ihren aufsteigenden Teil "0" und für Ihren absteigenden Teil "1" ist.

%Vor%     
user1202136 11.04.2012, 12:00
quelle
26
%Vor%     
FireAphis 11.04.2012 11:49
quelle
8

Wie wäre es damit:

%Vor%     
Luchian Grigore 11.04.2012 11:55
quelle
5

Alternative:

%Vor%

Der gute, es ist schneller in der Ausführung als alle ...

vergleichen     
ouah 11.04.2012 11:48
quelle
3

XOR-Bit # 4 (d. h. j & 0x10 ) mit Bits 3: 0. Sie müssen einen Weg finden, um dieses Bit in 4 Positionen zu "wiederholen".

    
Oliver Charlesworth 11.04.2012 11:49
quelle
3
%Vor%     
Skizz 11.04.2012 13:08
quelle
2
%Vor%     
KillianDS 11.04.2012 12:10
quelle
2
%Vor%     
Christoph 11.04.2012 14:05
quelle
2

Ich habe viele komplizierte Antworten gesehen, aber niemand hat die Symmetrie ausgenutzt wie .

%Vor%

In Aktion bei ideone (minus lexical_cast ):

  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1

Es funktioniert einfach und für jede Größenordnung der oberen Grenze (so weit wie Ihr Computer als genügend Speicher).

    
Matthieu M. 11.04.2012 12:45
quelle
1
%Vor%     
Spook 11.04.2012 12:03
quelle
1
%Vor%

Das, was ich mir ausgedacht habe. Es geht in die andere Richtung, dh: 15 - & gt; 0 - & gt; 15. Nur noch mehr zum Nachdenken. Verwendet mod und k, um herauszufinden, ob die Zahl negativ ist. Ich - J treffe mich in der Mitte. Es ist keineswegs perfekt und es gibt einige andere bessere Antworten.

    
TomTom 11.04.2012 14:17
quelle

Tags und Links