3N+1问题
题目要点说明:
题目本身是简单的,只需要按要求求出数列并求和,但是题目有两点很容易让人忽略的地方。
1.输入的i,j不一定是i<j,需要添加判断 i 和 j ,求出谁是最小值和最大值,这个是由于输入示例都是从小到大产生误导作用造成的。
2.另外一个就是输出,必须按照原来 i 和 j 的顺序。
以下是我写的源码:
/**
The 3n+1 problem
*/
#include <iostream>
#include <cstdio>
using namespace std;
int countLoop(int num)
{
int counter = 1;
while (num != 1)
{
if (num%2)
{
num = num*3 + 1;
}
else
{
num /= 2;
}
counter++;
}
return counter;
}
int main()
{
int i,j,max_num,imax_num,imin_num,tmp;
while (cin >> i >> j)
{
imax_num = i>j? i: j;
imin_num = i<j? i: j;
max_num = 1;
for (int k=imin_num; k<=imax_num; k++)
{
tmp = countLoop(k);
if (max_num < tmp)
{
max_num = tmp;
}
}
printf("%d %d %d\n", i, j, max_num);//这里是重点,一不小心就会忽略
}
}