Zurück zu den Herausforderungen
Einfach 0 gelöst 0% Erfolgsquote

Verdopplung der Körner auf einem Schachbrett

Berechne die Kornanzahl auf einem Feld und die Gesamtsumme auf allen 64 Feldern.

Das lernst du

  • Verdopplungen mit Zweierpotenzen berechnen
  • Eine geometrische Reihe summieren
  • Mit Werten nahe der 64-Bit-Grenze arbeiten

Problem

Feld 1 enthält ein Korn. Jedes nachfolgende Feld enthält doppelt so viele Körner wie das vorherige Feld. Gib sowohl die Anzahl auf dem angeforderten Feld als auch die Gesamtsumme auf den Feldern 1 bis 64 zurück. Schreibe jede Anzahl als Dezimaltext, da die Gesamtsumme des Brettes zu groß für einen vorzeichenbehafteten 64-Bit-Integer ist.

Implementiere chessboard_grains(square).

Eingabe

square: Das angeforderte Feld, nummeriert ab 1.

Ausgabe

Gib zwei Dezimalstrings zurück: [Anzahl auf dem angeforderten Feld, Gesamtsumme auf allen 64 Feldern].

Einschränkungen

1 ≤ square ≤ 64. Die Ausgabestrings enthalten nur Dezimalziffern, ohne Kommas, Leerzeichen oder führende Nullen.

Beispiele

Beispiel 1
Eingabe:
square = 6

Erwartete Ausgabe:
expected = ["32", "18446744073709551615"]
Eingabe:
long long square = 6;

Erwartete Ausgabe:
std::vector<std::string> expected = {"32", "18446744073709551615"};
Eingabe:
long square = 6;

Erwartete Ausgabe:
string[] expected = new string[] {"32", "18446744073709551615"};

Erläuterung

Die ersten sechs Anzahlen sind 1, 2, 4, 8, 16, 32. Die Gesamtsumme des Brettes ist 1 + 2 + … + 2⁶³ = 2⁶⁴ − 1.

Beispiel 2
Eingabe:
square = 1

Erwartete Ausgabe:
expected = ["1", "18446744073709551615"]
Eingabe:
long long square = 1;

Erwartete Ausgabe:
std::vector<std::string> expected = {"1", "18446744073709551615"};
Eingabe:
long square = 1;

Erwartete Ausgabe:
string[] expected = new string[] {"1", "18446744073709551615"};

Erläuterung

Das erste Feld enthält 1 Korn. Die zweite Ausgabe bezieht sich immer auf alle 64 Felder, nicht nur auf das angeforderte Präfix.

So gehst du vor

Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.

Hinweis 1

Jedes Feld verdoppelt das vorherige, also hängt die gesuchte Menge nur von seiner Position ab.

Hinweis 2

Die Summe über alle 64 Felder ist eine geometrische Reihe und wächst weit über normale Integer-Grenzen hinaus.

Hinweis 3

Gib beide Werte als reinen Dezimaltext zurück, und beachte, dass das erste Feld 1 ist, nicht 0.

Erwartete Komplexität

Zeit O(1), zusätzlicher Speicher O(1)

Referenzen

Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.