У меня есть этот раздел кода, который должен найти последовательность Коллатца всех целых чисел в заданном диапазоне, определенном пользовательским вводом. Проблема в том, что в 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;
}
Рядом с другой ошибкой, вы также используете current_number
перебирать диапазон ввода, и вы меняете его для вывода последовательности Коллатца. Вы должны изменить копию current_number
,
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 .. И так далее ..: _ (
Совет на всю жизнь: отлаживайте свой код, это сэкономит время, усилия и иногда деньги.
По поводу бесперебойного цикла. Если current_number! = 1 и это не 2 (если это так, другой парень ответил), он входит в цикл while и никогда не заканчивается, потому что …
Допустим, это 3:
3% 2! = 0, поэтому становится 10,
10% 2 == 0, так что становится 5,
5% 2! = 0, поэтому становится 16
…
Никогда не терпит неудачу.