Schreiben Sie ein Programm und lösen Sie das unten stehende Problem in einer für Sie neuen Sprache:
In einer High School mit 1000 Schülern gibt es 1000 Schließfächer. Das Problem beginnt damit, dass der erste Schüler alle 1000 Schließfächer öffnet. Als nächstes schließt der zweite Schüler die Schließfächer 2,4,6,8,10 und so weiter, um die Schließfächer 1000 zu schließen. Der dritte Schüler ändert den Status (öffnet Schließfächer geschlossen, schließt Schließfächer offen) für Schließfächer 3,6,9,12,15 und so weiter. Der vierte Schüler ändert den Zustand der Schließfächer 4,8,12,16 und so weiter. Dies geht so lange weiter, bis jeder Schüler an der Reihe war. Wie viele Schließfächer werden am Ende geöffnet sein? Wie lautet die Formel?
Finden Sie die Lösung in Dart unten:
import 'dart:io'; | |
int numberOfLockers = 1000; | |
// Lockers start all open because of the first student | |
List<String> lockers = new List.filled(numberOfLockers + 1, 'open'); | |
main() { | |
for (var student = 2; student <= numberOfLockers; student++) { | |
// For the student, open the locker if closed, or close if open | |
for (var locker = student; locker <= numberOfLockers; locker += student) { | |
lockers[locker] = lockers[locker] == 'open' ? 'closed' : 'open'; | |
} | |
} | |
// Count of lockers remaining open | |
int total = 0; | |
// List the lockers that remain open | |
for (var locker = 1; locker <= numberOfLockers; locker ++ ) { | |
if (lockers[locker] == 'open') { | |
stdout.write("${locker} "); | |
total += 1; | |
} | |
} | |
print("\nThere are ${total} lockers remaining open."); | |
} | |
// 1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256 289 324 361 400 441 484 529 576 625 676 729 784 841 900 961 | |
// There are 31 lockers remaining open. |