题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1032
解题思路:这道题的意思就是输入一个区间i,j找出这里面的最长周期;周期是这样子:当这个数(不为1)是奇数时就变为3*n+1,为偶数时就变为n/2,并且用sum来计数周期,直到n为1就跳出。(水题!!!注意杭电oj出题的一些坑)
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int a,b,sum,t,maxn; 6 bool f=false;//标记是否交换了 7 while(cin>>a>>b){ 8 if(a>b){ 9 swap(a,b);//题目的陷井 10 f=true; 11 } 12 maxn=0; 13 for(int i=a;i<=b;i++){ 14 sum=1,t=i; 15 while(t!=1){ 16 if(t%2)t=3*t+1; 17 else t/=2; 18 sum++; 19 } 20 maxn=max(sum,maxn); 21 } 22 if(f){ 23 swap(a,b);//题目有说保持原来的数据输出,所以还得交换过来 24 f=false;//同时置f为false 25 } 26 cout<<a<<‘ ‘<<b<<‘ ‘<<maxn<<endl; 27 } 28 return 0; 29 }