【发布时间】:2012-01-23 06:32:19
【问题描述】:
我正在尝试解决 C++ 中的 3n+1 问题。我想成对输入并计算其最大周期长度然后输出。
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() 返回 true 时停止输入输入,但它在程序的第一次执行中工作,但之后它进入无限循环以输入数字并且它无法退出。谁能帮我解决这个 cin 问题,我怎样才能避免这个无限循环?
【问题讨论】:
-
这里不需要
goto。请改用break。 -
这似乎与您的问题没有直接关系,但如果您将
b声明为 10×2 数组,则应避免让i超过 9。 -
感谢宝贵的 cmmnts..