题意:已经一个数能够经过这样的变化:
1 : if n = 1 then STOP
if n is odd then n <-- 3n+1
else n <-- n/2
GOTO 1
最后的结果都会变为1,要求是输入一数字区间,输出经过这样的变化最后结果为1的操作得最多的一次的次数。
#include <iostream>
using namespace std;
int main()
{
long max=0,cishu=0;
long minj,maxj,i,number,tep;
while(cin>>minj>>maxj)
{
tep=0;
max=0;
if(minj>maxj)//注意题目的阴险好像就在这里,不要被simple迷惑了
{
long temp;
temp=minj;
minj=maxj;
maxj=temp;
tep=1;
}
for(i=minj;i<=maxj;i++)
{
number=i;
cishu=1;
while(number!=1)
{
if(number%2)
number=3*number+1;
else
number=number/2;
cishu++;
}
if(cishu>max)
max=cishu;
}
if(tep==1)
cout<<maxj<<" "<<minj<<" ";
else
cout<<minj<<" "<<maxj<<" ";
cout<<max<<endl;
}
return 0;
}
本文介绍了一个通过编程实现的算法,该算法用于解决Collatz猜想问题,即对于任意正整数n,若n为偶数则除以2,若为奇数则乘3加1,最终都能回到1。程序接收一个数字范围,并找出此范围内按照Collatz猜想操作序列最长的数字及其操作次数。
644

被折叠的 条评论
为什么被折叠?



