Java Schachbrett und Reiskörner in Java HILFE!
Guten Abend, ich habe ein riesieges Problem ich weiss überhaupt keinen ansatz wie ich diese Aufgabe mithilfe von "Feldern als Eingabeparameter" lösen soll ich danke für jede hilfe ! Das programm soll in Java entstehen.
Der Sage nach war der indische König Shehram vom Schachspiel so begeistert, dass er dem Erfinder Sessa Ebn Daher jeden Wunsch zu erfüllen versprach. Um so überraschter war er, als der Erfinder die bescheidene Bitte äußerte, der König möge ihm so viele Weizenkörner schenken, wie sich zusammen ergeben, wenn man auf das erste der 64 Felder des Schachbretts ein Weizenkorn legt, auf das zweite zwei, auf das dritte vier, auf das vierte acht und so fort, d.h. auf das nächste Feld immer die doppelte Anzahl von Körnern wie auf das vorhergehende. Schreiben Sie ein Java-Programm »Schachbrett«, das es ermöglicht, das Problem Schachbrett zu lösen. Das Programm muss in der Lage sein, längere Zahlen zu verarbeiten, als in einer Java-Speicherzelle »long« darstellbar sind (siehe Lösungschablone).
Die Biginteger methode darf ich leider nicht verwenden!
5 Antworten
Die "Formel" ist ganz einfach n = 2^63
da man mit 2^0 (1) für das 1. Feld anfängt!
Wie man das programmtechnisch macht, weis ich nicht. Wie beim Taschenrechner müsste man aber auch größere Zahlen mit E 10 = 10^10 einschreiben können.
Die Fragestellung ist gar nicht klar. Dem Leser wurde selbst überlassen, zu wissen, was "das Problem" ist. Es wurde weder nach der Zahl der Reiskörner auf dem letzten Feld gefragt noch nach der Zahl der Reiskörner auf dem ganzen Schachbrett. Es ist lediglich plausibel, daß letzeres gemeint sein dürfte, weil diese Reismenge laut Geschichte die Belohnung für den Erfinder sein sollte. Das ist keine Haarspalterei von mir. Wir können hier im Forum oft genug sehen, daß Schüler nicht verstehen, was der Lehrer überhaupt will, weil die Aufgabe verwaschen formuliert ist.
Die Fragestellung ist gar nicht klar. Dem Leser wurde selbst überlassen, zu wissen, was "das Problem" ist.
"...der König möge ihm so viele Weizenkörner schenken, wie sich zusammen ergeben, wenn man auf das erste der 64 Felder des Schachbretts ein Weizenkorn legt, auf das zweite zwei, auf das dritte vier,..."
"zusammen" -> Summe. Finde ich klar genug.
Ja, für Freizeit-Programmierung und Denksportaufgaben ist eine unklare Spezifikation kein Beinbruch und trägt für den, der es merkt, noch zum Tiefgang der Aufgabe bei. Wer aber professionell programmieren lernen will, der muß verstehen, daß man dem Auftraggeber so etwas nicht durchgehen lassen darf. Leuten, die nicht klipp und klar sagen können, was sie wollen, muß man auf die Sprünge helfen, sonst kommt man mit ihnen in Teufels Küche.
Das gleiche gilt an der Schule. Lehrer, die verwaschene Aufgaben stellen und dann Noten auf "richtige" und "falsche" Lösungen geben, sind eine Zumutung. Schüler sollten sich das keinesfalls bieten lassen. Das muß uns jetzt hier aber nicht weiter belasten, denn es war von einer beruflichen oder schulischen Aufgabe ja nicht die Rede. Ich bitte dies nur als kritische Randnotiz zu verstehen.
also da du Big Integer nicht benutzen darfst, nimmst du String und bastelst dir dafür ne einfache multiplikationsmethode. Dann kannst du einfach eine schleife nehmen die 64x multipliziert. Alternativ kannst du auch die schleife nur bis zum eingegebenen Wert laufen lassen.
Zur Kontrolle:
Es sind insgesamt 2^64 - 1 = 18446744073709551615 ~ 1,84*10^19 Reiskörner.
Gruß, Helmut
19
siehe z.B.: Karatsuba-Algorithmus
oder vielleicht:
http://www-ai.math.uni-wuppertal.de/SciComp/teaching/ws10/info1/handouts/TeilB251-273x4.pdf
also die Rechenschritte irgendwie aufteilen, z.B. indem du die ganze Berechnung als wiederholte Addition von 2-en durchführst. Sobald die Summe dann einen gewissen Wert z.B 10 000 000 000 überschreitet, beginnst du wieder bei Null, erhöst aber den "10 000 000 000 - Block" um 1
Entschuldigung und OK, ich muss ja die GesamtSUMME nehmen
Schreiben Sie ein Java-Programm »Schachbrett«, das es ermöglicht, das Problem Schachbrett zu lösen.
Unklare Aufgabenstellung. Worin besteht denn das "Problem Schachbrett"?
2^63 ist die Anzahl der Reiskörner, die auf dem 64. Feld zu liegen kommen. Die Summe der Reiskörner auf allen 64 Feldern hingegen ist 2^64 - 1