Я работаю над проектом euler # 14:
Вопрос:
Для набора положительных целых чисел определена следующая итерационная последовательность:
n → n / 2 (n четно) n → 3n + 1 (n нечетно)
Используя приведенное выше правило и начиная с 13, мы генерируем следующую последовательность:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1. Как видно, эта последовательность (начиная с 13 и заканчивая 1) содержит 10 членов. Хотя это еще не доказано (проблема Коллатца), считается, что все начальные числа заканчиваются sh на 1.
Какое начальное число, меньше одного миллиона, дает самую длинную цепочку?
ПРИМЕЧАНИЕ: После начала цепочки разрешено использовать термины go выше одного миллиона.
Проблема:
Когда я запускаю этот код, первый для l oop работает как положено. Но тогда переменная num
, похоже, не увеличивается для l oop и остается на 2 (чего нет даже в параметрах num, которые я дал для начала), давая результат:
2
0
1
1
повторяется снова и снова. Не знаю, почему это происходит, и ничего не могу найти в Интернете.
Код:
#include <stdio.h>
int main() {
int maxcount = 0;
for (int num = 5; num < 2000000; num++) {
printf("%d\n0\n\n", num);
int count = 0;
while (num >= 1) {
count++;
if (num == 2) {
num = 1;
printf("1\n%d\n\n", count);
}
if (num > 1) {
if (num % 2 == 0) {
num = num / 2;
printf("%d\n%d\n\n", num, count);
}
else {
num = (3 * num) + 1;
printf("%d\n%d\n\n", num, count);
}
}
if (num == 1) {
break;
}
}
if (count > maxcount) {
maxcount = count;
}
}
printf("%d", maxcount);
return 0;
}