Для цикла, который не увеличивается или тест не завершается

У меня есть этот раздел кода, который должен найти последовательность Коллатца всех целых чисел в заданном диапазоне, определенном пользовательским вводом. Проблема в том, что в for петли, current_number никогда не увеличивается или во внутреннем while петли, current_number != 1 никогда не подведет Что мне не хватает?

while (lower != 0 && upper != 0) {
cout << "Lower bound (integer): ";
cin >> lower;
cout << "Upper bound (integer): ";
cin >> upper;
if (lower == 0 || upper == 0)
return 0;
for (current_number = lower; current_number <= upper;
++current_number) {
//cout << current_number << endl;
counter = 0;
sequence = sequence + to_string(current_number) + ", ";
while (current_number != 1) {
if (current_number % 2 == 0) {
current_number = current_number / 2;
sequence = sequence + to_string(current_number) + ", ";
}
else {
current_number = current_number * 3 + 1;
sequence = sequence + to_string(current_number) + ", ";
}
cout << current_number << endl;
++counter;
}
//if (counter > longest) {
//  longest = counter;
//  the_longest_seed = current_number;
//}
}
cout << sequence << endl;

}

2

Решение

Рядом с другой ошибкой, вы также используете current_number перебирать диапазон ввода, и вы меняете его для вывода последовательности Коллатца. Вы должны изменить копию current_number,

0

Другие решения

current_number % 2 == 0 верно для всех current_number = 0, 2, 4, 6, ...,

Когда это происходит, вы устанавливаете current_number быть current_number / 2.. Так когда current_number 2, вы устанавливаете его на 1, а затем увеличиваете его (++current_number), то опять 2 (!= 1), так что вы введете while цикл, то потому что 2 % 2 = 0 Вы снова установите его на 1 .. И так далее ..: _ (

Совет на всю жизнь: отлаживайте свой код, это сэкономит время, усилия и иногда деньги.

7

По поводу бесперебойного цикла. Если current_number! = 1 и это не 2 (если это так, другой парень ответил), он входит в цикл while и никогда не заканчивается, потому что …

Допустим, это 3:

3% 2! = 0, поэтому становится 10,

10% 2 == 0, так что становится 5,

5% 2! = 0, поэтому становится 16

Никогда не терпит неудачу.

0