Это проблема для онлайн-судьи. Требуется два входа: i и j, где между двумя входами должна быть найдена наибольшая длина цикла 3n + 1.Пока цикл не завершается, когда условие выполнено (C++)
Программа должна заканчиваться, когда x становится равным 1. Но когда она равна 1, код не заканчивается, а продолжает цикл 1. Заранее благодарим за любую помощь.
#include <iostream>
using namespace std;
int main(){
int i, j, temp_i, temp_j, counter, max;
max = 0;
cin >> i >> j;
temp_i = i;
temp_j = j;
for(int x = i; x < j; x++){
counter = 1;
while(x != 1){
if(x % 2 == 0){
x = x/2;
// cout << x << endl;
}
else{
x = 3*x + 1;
}
counter++;
}
if(counter > max){
max = counter;
}
}
cout << temp_i << " " << temp_j << " " << max << endl;
return 0;
}
Вы уверены, что 'x' станет 1 в любое время? Похоже, он может расходиться до бесконечности. –