Запрос должен начинаться со случайного числа и постоянно менять это число в условиях, когда (1), если число четное, вы делите его на два и (2), если число нечетное , вы умножаете его на три, затем добавляете один.Использование цикла while
Так, например:
Если число было 13, то на выходе будет: 40 20 10 5 16 8 4 2 1
(Также программа должна прекратить после того, как значение 1 является достигнуто)
#include <iostream>
using namespace std;
int main()
{
int x;
int lengthcount=0;
cout << "Enter a number: ";
cin >> x;
while(x%2==0)
{
x=x/2;
cout << x << " ";
lengthcount++;
}
while(x%2==1)
{
x=x*3+1;
cout << x << " ";
lengthcount++;
}
if(x==1)
{
return 1;
}
cout << "Length:" << lengthcount << endl;
}
Это то, что у меня есть до сих пор. Но когда я компилирую и запускаю код, появляется только первое значение 40. Не остальные компоненты. Я предполагаю, что это связано с тем, что петли не соединяются друг с другом. Как получить его так, чтобы выход одного цикла переходил в другой цикл и обратно?
Шаг 1: Прекратите предполагая вещи. Шаг 2. Запустите свой отладчик и узнайте, что происходит _actually_. –
то, что вы написали: в то время как число четное, разделите на 2. Затем, пока число нечетное, умножьте на 3 и добавьте 1. И это конец! Итак, с 13 вы проходите мимо первого, повторяйте один раз через секунду, и все готово. Вам нужен глобальный цикл while, который выполняется до тех пор, пока x не равен 1. В этом цикле вы выполняете различные тесты и изменения в x. –