Das Schachbrett und der König?

5 Antworten

Wie sieht denn dein Ansatz aus? 

Wenn wir davon ausgehen, dass die Felder von 0 bis 63 durchnummeriert sind, dann ergibt sich, dass auf Feld X insgesamt 2^X Reiskörner liegen. Auf dem letzten Reisfeld liegen dementsprechend 2^63 Reiskörner - das ist eine Zahl mit 18 Stellen. Die Summe wird noch größer, weil die Reiskörner aufsummiert werden. Dementsprechend würde ich einen float oder double als Datentyp nehmen.

Das sind nur ein paar Denkansätze. Wie du schon siehst, will hier keiner deine Hausaufgaben machen. Man hilft dir eher weiter, wenn du zu deinem Ansatz eine konkrete Frage stellst, wo du nicht weiter kommst.


PWolff  23.05.2017, 12:58

BigInteger geht auch, ist aber um Größenordnungen langsamer.

1
Machtnix53  23.05.2017, 22:42
@PWolff

Warum sollte das langsamer sein? Double oder gar Float ist sehr ungenau, da nur ein Teil der Bits Mantisse ist.

0

Anzahl = sum (i in 0 - 63) 2^i

So nun nur noch programmieren...

Woher ich das weiß:Studium / Ausbildung – Informatikstudium

Als Datentyp brauchst du ein unsigned long mit 64 Bit. Jedes dieser Bits entspricht einem Feld. Wenn jedes Feld belegt ist, ist jedes Bit gesetzt.

Also kommt man auf 2^64 -1 oder 18.446.744.073.709.551.615 (18 Trillionen, 446 Billiarden, 744 Billionen, 73 Milliarden, 709 Millionen, 551 Tausend, 615).


Machtnix53  23.05.2017, 22:49

int i;

unsigned long anzahl=0;

for (i=0;i<64;i++) anzahl |= (1<<i) ;

3

Am besten tust du die Variablen vor der Schleife definieren. 

uint Reiskörner =1

int Feld=1

Dann brauchst du eine For Schleife.

for (int i=1; i<=64;i++)

{Reiskörner=Reiskörner*2;

Feld=Feld+1;

Console.WriteLine("Die Summe der Reiskörner auf Feld"+Feld+" sind "+Reiskörner+" Reiskörner!");}

An welcher Stelle kommst du denn nicht weiter?