Reiskörner auf Schachbrett

Aero93

Grünschnabel
Wir sind gerade in der Schule dabei, verschiedenste Programme zu programmieren, z.B. wie ich schon im Titel angegeben habe, das Programm, wo ausgerechnet wird, wieviele Reiskörner auf dem x. Feld (1<=x<=64) liegen und die Summe aller Felder.

Ich bin schon so weit, dass er mir anzeigt, wieviele Reiskörner auf dem beliebigen Feld liegen, also es war gefordert, dass diese Liste untereinander angegeben wird.
Aber mein Problem ist nun, wie rechne ich die Summe aus, ohne eine lange Rechnung einzutippen, weil das ist leider verboten.


Was ich bis jetzt habe sieht so aus:
#include <stdio.h>
#include <stdlib.h>

int main()
{
int i;
unsigned long long inh, summe1, summe2;

inh=1;

for(i=1;i<=64;i++)
{
summe1=inh;
{
printf ("%d. Feld:\t%I64u\n",i,inh);

inh=inh*2;
}
summe2=inh+summe1;
}

printf ("Summe:\t\t%I64u\n\n",summe2);

return 0;
}

Habe schon in diesem Forum nachgesehen, ob so ein thread schon existiert, habe aber nichts gefunden was mir weiterhelfen könnte.
Bedanke mich schon im vorraus für die Hilfe.

lG Aero
 
Hi und willkommen im Forum!

Du hast also ein Schachbrett, am ersten Feld liegt ein Reiskorn, am zweiten zwei, dann vier, acht usw?

Ist ja eher ein mathematisches Problem, da die Summe rauszukriegen
Die Summe wäre dann glaub ich bei 64 Schachbrettfeldern
2^64- 1

Überlegung: Feld1:1
Feld2:2, insgesamt 3
Feld3:4, insg. 7
=2 hoch Feldanzahl minus 1

schreibst also
printf ("Summe:\t\t%I64u\n\n",1<<64 -1);

könnte (müsste?) allerdings einen Variablenüberlauf geben
so sollte es eher gehen
printf ("Summe:\t\t%I64u\n\n", (1<<63 -1)*2+1 );

Ist glaub ich 18446744073709551615 :-)

Gruß
 
Also ich hab mit Programmieren nichts am Hut, aber ist ja echt eher Mathematisch ;)
Du musst ja einfach 2^x nehmen, wobei x dann die Feldanzahl ist.
Sollte ja im Prinzip kein Problem sein, nur weiß ich ja nicht, wie einfach/schwer das zu scripten ist.
 
Ist da nicht ein kleiner Fehler drinnen ? :)
2^x und 2^x -1 ist ein Unterschied,
Nach deiner Rechnung müssten bei zwei Feldern (1+2) schon 4 drauf sein
 
Einfach mal so getippt (daher ungetestet):
Code:
unsigned long summe;
int x;

x = 33; // irgendwas zwischen 1 und 64
summe = 0;
for(int i = 1; i <= x; i++)
  summe += 2^(i - 1);

Gute Nacht. :)
 
Hi.
Einfach mal so getippt (daher ungetestet):
Code:
unsigned long summe;
int x;

x = 33; // irgendwas zwischen 1 und 64
summe = 0;
for(int i = 1; i <= x; i++)
  summe += 2^(i - 1);
Wenn du jetzt noch statt des Xor-Operators eine Potenzierungsfunktion aufrufst könnte es klappen... ;)

Hier mal ein anderer Vorschlag zur Berechnung der Summe:
C++:
#include <stdint.h>

const int n = 33;
uint64_t sum = 0;
sum = ~sum >> (64 - n);
Gruß
 
Die *Summe* der Reiskörner bis Feld x ist genau 2 * 2^x -1, wenn man davon ausgeht, dass das erste Feld ein Korn enthält.
 
Natürlich, denn das erste Feld hat ja 2^0 Reiskörner. Ein Umbiegen des Index, damit dieser der Ordinalität des Feldes entspricht ist nur mäßig sinnvoll. Zudem wird ein Array normalerweise auch mit 0 begonnen, so dass man eine direkte Referenz auf den Exponenten hat.
 
Natürlich, denn das erste Feld hat ja 2^0 Reiskörner. Ein Umbiegen des Index, damit dieser der Ordinalität des Feldes entspricht ist nur mäßig sinnvoll. Zudem wird ein Array normalerweise auch mit 0 begonnen, so dass man eine direkte Referenz auf den Exponenten hat.
Warum sollte man die Analogie zum Array hierbei bemühen? Es war ganz klar gesagt worden, das 1<=x<=64 gelten soll. Sheel hatte bereits völlig korrekt die Formel erklärt. Dein Beitrag war deshalb ziemlich überflüssig (und falsch).

Gruß
 
Zurück