sicily 1000. 3n+1数链问题

Description 

在计算机科学上,有很多类问题是无法解决的,我们称之为不可解决问题。然而,在很多情况我们并不知道哪一类问题可以解决,那一类问题不可解决。现在我们就有这样一个问题,问题如下:

1.       输入一个正整数n

2.       n显示出来;

3.       如果n=1则结束;

4.       如果n是奇数则n变为3n+1 ,否则n变为n/2

5.       转入第2步。

例如对于输入的正整数22,应该有如下数列被显示出来:

22  11  34  17  52  26  13  40  20  10  5  16  8  4  2  1

 

我们推测:对于任意一个正整数,经过以上算法最终会推到1。尽管这个算法很简单,但我们仍然无法确定我们的推断是否正确。不过好在我们有计算机,我们验证了对于小于1,000,000的正整数都满足以上推断。

对于给定的正整数n,我们把显示出来的数的个数定义为n的链长,例如22的链长为16

       你的任务是编写一个程序,对于任意一对正整数ij,给出ij之间的最长链长,当然这个最长链长是由ij之间的其中一个正整数产生的。我们这里的ij之间即包括i也包括j

 

Input
输入文件只有一行,即为正整数 ijij之间以一个空格隔开。0 <  i ≤  j < 10,000。
Output
文件只能有一行,即为 ij之间的最长链长。
Sample Input
 Copy sample input to clipboard
1 10
Sample Output
20

我的解法:

#include <iostream>
//#include <fstream>

using namespace std;

int main()
{
	//ifstream cin("aaa.txt");
	int min,max;
	int largest=0;
	int count=0;
	
	cin>>min>>max;
	for(int i=min;i<=max;i++)
	{
		int count=0;
		int temp=i;
		while(temp != 1)
		{
			if(temp%2 == 0)
			{
				temp = temp/2;
				count++;
			}
			else
			{
				temp = 3*temp + 1;
				count++;
			}
		}
		if(largest < count)
			largest = count;

	}
	largest++;
	cout<<largest<<endl;
	return 0;


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值