hdoj 1032 The 3n + 1 problem(细节细节)

来源:互联网 发布:天龙八部淘宝抢号行吗 编辑:程序博客网 时间:2024/05/17 13:45

题目很简单。但有3个细节我觉得得注意

1.题目没说明I,j谁大谁小,这个需要判断

2.如果直接循环i到j之间的每个数,会超时(血的教训),这时你观察题目,会发现求最大值的话,肯定是奇数的cycle length比与其

相邻的偶数的cycle length大,所以我们只需要判断i与j之间的奇数就行了。

3.注意i还可以和j相等。

#include<stdio.h> using namespace std;long long cl(long long n){long long  count=1;while(n!=1){if(n%2==0){n=n/2;count++;}else{n=3*n+1;count++;}}return count;}int main(){long long i,j,max,temp,k;long long a,b;while(~scanf("%lld%lld",&i,&j)){max=-1;if(i>j){a=i;b=j;}else{a=j;b=i;}if(b%2==0){if(a==b)k=b;else k=b+1;}else k=b;while(k<=a){temp=cl(k);if(temp>max)max=temp;k=k+2;}printf("%lld %lld %lld\n",i,j,max);}return 0;}


原创粉丝点击