标签:
UVA 100 The 3*n+1 problem.
解题思路:对给定的边界m,n(m<n&&0<m,n<1 000 000);求X(m-1<X<n+1)进过操作至1的最大步数。
对m到n依次计算,比较获得最大步数。
注意:1.输入格式。
本题利用 while(scanf("%d %d",&m,&n)!=EOF)
{
}
2.输出与题给出相同。
3。对当边界为1<n<1 000 000时变量类型的选取。
代码如下:
#include <stdio.h> #include <stdlib.h> void FindResult(int Min,int Max) { int i,count,temp; temp=0; //temp存放最大步数 long long n; //注意这n类型为long long型,当这为int时,计算837799溢出 for(i=Min;i<=Max;i++) { n=i; count=0; while(1) { if(n==1) { count++; if(temp<count) { temp=count; } break; } if(n%2==1) { n=3*n+1; count++; } else { n=n/2; count++; } } } printf("%d\n",temp); } int main() { int MaxN,MinN,t; //MinN下界,MaxN为上界。 t=0; while(scanf("%d %d",&MinN,&MaxN)!=EOF) { printf("%d %d ",MinN,MaxN); if(MinN>MaxN) { t=MinN; MinN=MaxN; MaxN=t; } FindResult(MinN,MaxN); //计算最大步数 } return 0; }
以上代码不足之处请指出,谢谢
如果有更好的方法,望不吝赐教,大家相互学习进步。
标签:
原文地址:http://www.cnblogs.com/wreck/p/5426851.html