Напишіть програму, яка розв'яже нижченаведену задачу на будь-якій новій для вас мові:
У середній школі з 1000 учнями є 1000 шафок. Завдання починається з того, що перший учень відкриває всі 1000 шафок; потім другий учень закриває шафки 2,4,6,8,10 і так далі до шафки 1000; третій учень змінює стан (відкриває закриті шафки, закриває відкриті шафки) на шафки 3,6,9,12,15 і так далі; четвертий учень змінює стан шафок 4,8,12,16 і так далі. Це триває до тих пір, поки до кожного учня не дійде черга. Скільки шафок буде відкрито в кінці? Яка ця формула?
Знайдіть рішення на Dart нижче
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |