Я пытаюсь решить проблему 3n + 1 в C++. Я хочу взять вход парами и вычислить его максимальную длину цикла, а затем вывести его.Как избежать бесконечного цикла в этой программе
I/P: 1 10
100 200
201 210
900 1000
O/P: 1 10 25
100 200 125
201 210 89
900 1000 174
Код:
#include<iostream>
using namespace std;
int clen(int i)
{
int len=1;
while(i!=1)
{
len++;
if(i%2==0)
i/=2;
else
i=3*i+1;
}
return len;
}
int maxclen(int a, int b)
{
int i,len,maxlen=0;
for(i=a;i<=b;i++)
{
len=clen(i);
if(len>maxlen)
maxlen=len;
}
return maxlen;
}
main()
{
int b[10][2],l,i,len[10];
for(i=0;;i++)
{
cin>>b[i][0];
if(cin.fail())
{
cin.clear();
goto a;
}
cin>>b[i][1];
if(cin.fail())
goto a;
}
a:
l=i;
for(i=0;i<=l;i++)
{
if(b[i][1]>b[i][0])
len[i]=maxclen(b[i][0],b[i][1]);
else
len[i]=0;
}
for(i=0;i<l;i++)
cout<<b[i][0]<<" "<<b[i][1]<<" "<<len[i]<<endl;
}
Я хочу, чтобы остановить поступающий на вход, когда cin.fail() возвращает истину, но его работы в течение нескольких первых выполнения программы, но после того, что она входит в бесконечный чтобы ввести цифры, и он просто не может выйти. Может ли кто-нибудь помочь мне по этой проблеме cin, Как я могу избежать этого бесконечного цикла?
Нет необходимости 'goto' здесь. Вместо этого используйте 'break'. – Pubby
Это, похоже, не связано напрямую с вашей проблемой, но если вы объявляете 'b' как массив 10 × 2, вы должны избегать того, чтобы' i' расти до 9. – jwodder
Спасибо за ценные cmmnts .. –