今天,看了入门经典的书,然后我觉得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