Ответ, данный здесь { ссылка } - это ответ, который нужно принять, поскольку он объясняет проблемы в коде и предлагает решение.
Я просто хочу добавить, что проблема заключается в количество раз, когда вы нажимаете на дверь.
Если вы переключаете ее четное количество раз, дверь все равно будет закрыта в конце.
Если вы переключите ее нечетное количество раз, дверь будет открыта в конце.
Это зависит от количества делителей, которое имеет номер двери, то есть четное число делителей или нечетное число делителей.
Пример:
14 have the divisors 1, 2, 7, 14 That's an even number so door 14 is still closed
16 have the divisors 1, 2, 4, 8, 16 That's an odd number so door 16 will be open
Единственными числами, которые имеют нечетное число делителей, являются квадратные числа.
Поэтому вы можете просто сделать:
int numDoors = 100;
for (int i=1; (i*i) <= numDoors; ++i) printf("%d\n", i*i);
Это просто, быстро и без массивов - но требует, чтобы вы знали загадку заранее: -)