POJ1207The 3n + 1 problem

转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1308926394

 

大致题意:

根据给定的算法,可以计算一个整数的循环数

现在给定一个区间,计算这个区间的所有数的循环数,把最大的循环数输出

PS:输出的是整数A的循环数,而不是输出整数A

解题思路:

好吧,我承认是在找题时,因为输错题号而碰到的水题,顺手A的,没难度,暴力即可。

注意的只有一点:

输入的两个区间端点不一定是从小到大输入的,因此要先对这两个数排一下序。

 

 1 //Memory Time
2 //256K 0MS
3
4 #include<iostream>
5 using namespace std;
6
7 int CycleNum(int i)
8 {
9 int count=1;
10 while(i!=1)
11 {
12 if(i%2)
13 i=3*i+1;
14 else
15 i/=2;
16 count++;
17 }
18 return count;
19 }
20
21 int main(void)
22 {
23 int a,b;
24 while(cin>>a>>b)
25 {
26 int x=a<b?a:b;
27 int y=a>b?a:b;
28 int MaxCycle=0;
29 for(int i=x;i<=y;i++)
30 {
31 int temp=CycleNum(i);
32 if(MaxCycle<temp)
33 MaxCycle=temp;
34 }
35 cout<<a<<' '<<b<<' '<<MaxCycle<<endl;
36 }
37 return 0;
38 }
[ EXP技术分享博客 ] 版权所有,转载请注明出处: http://exp-blog.com
原文地址:https://www.cnblogs.com/lyy289065406/p/2120468.html