POJ-1207 The 3n + 1 problem

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuli_dear_wang/article/details/88171280

一道水题,也是一道坑题。在这里记录下一个坑。

  1. 本来很简单,但是没考虑到i和j的大小不确定,所以得先判断大小,然后进行遍历。其实题上给的输入例子,都是 i<j,但是仔细看题上说明并没有说i和j谁大谁小。所以这里还是需要进行判断的

两个小技巧:

  1. 判断奇偶数的简单方法:n & 1 结果为 1 说明是奇数;否则为偶数
  2. 数遍历次数的话。要从0开始,别犯错误想当然从1开始。。

#include <iostream>
#include <sstream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
using namespace std;

//const int maxn = 100000 + 10;

int panduan(int n)
{
	int i;
	for (i = 0; n != 1; i++){      //注意:如果看循环多少次,都是从0开始算完一遍之后开始计
		if (n & 1)                 // 判断为奇数
			n = 3 * n + 1;    
		else                       // 判断为偶数
			n = n / 2;
	}
	return i+1;
}
int main(){

	int i,j;
	while (cin>>i>>j)                    
	{
		int m = min(i, j);
		int n = max(i, j);
		int num = 0;
		for (int a = m; a <= n; a++)
		{
			num=max(num, panduan(a));	         // 注意最大值最小值函数如何使用
		}
		cout << i << " " << j << " " << num << endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wuli_dear_wang/article/details/88171280
今日推荐