今天,看了入门经典的书,然后我觉得3n+1的改进那里有点问题,贴一下代码吧!
#include <stdio.h>
int main()
{
long n,count = 0;
scanf("%d",&n);
while(n > 1)
{
if(n & 1)
{
n=3*(n-1)/2+2;
count+=2;
}
else
{
n/=2;
count++;
}
}
printf("%d\n",count);
return 0;
}问题主要是:在这里如果换成long long,结果就会有问题。对于这个问题,我一直觉得百思不得其解。
后来,在询问了以后发现原来是输入有问题:重新贴一下代码吧!
#include <stdio.h>
int main()
{
__int64 n;
int count = 0;
scanf("%I64d",&n);
while(n > 1)
{
if(n & 1)
{
n=3*(n-1)/2+2;
count+=2;
}
else
{
n >>= 1;
count++;
}
// printf("%d",n);
}
printf("%d\n",count);
//printf("%d\n",sizeof(long long));
return 0;
}本文出自 “我的算法笔记” 博客,谢绝转载!
入门笔记上面的3n+1问题的思考,布布扣,bubuko.com
原文:http://liu168ad.blog.51cto.com/7511123/1384016