题目 1095: The 3n + 1 problem.c语言实现

题目 1095: The 3n + 1 problem.c语言实现,第1张

题目 1095: The 3n + 1 problem.c语言实现

题目 1095: The 3n + 1 problem
时间限制: 1Sec 内存限制: 64MB 提交: 16005 解决: 4417
题目描述
‎请考虑以下算法以生成数字序列。以整数 n 开头。如果 n 为偶数,则除以 2。如果 n 为奇数,则乘以 3 并加 1。
使用新值 n 重复此过程,并在 n = 1 时终止。例如,将为 n = 22 生成以下数字序列:
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 推测(但尚未证明)对于每个整数 n,此算法将终止于 n = 1。
尽管如此,这个猜想仍然适用于至少1, 000, 000的所有整数。对于输入 n,n 的循环长度是生成的数量,最多包括 1。
在上面的示例中,循环长度 22 为 16。给定任意两个数字 i 和 j,您将确定 i 和 j 之间所有数字(包括两个端点)的最大循环长度。‎
输入
‎输入将由一系列整数对 i 和 j 组成,每行一对整数。所有整数将小于 1,000,000 且大于 0。‎
输出
‎对于每对输入整数 i 和 j,输出 i、j 的顺序与它们在输入中出现的顺序相同,然后是 i 和 j 之间整数的最大循环长度。这三个数字应用一个空格分隔,所有三个数字都在一行上,每行输入都有一行输出。‎
样例输入
1 10
100 200
201 210
900 1000
样例输出
1 10 20
100 200 125
201 210 89
900 1000 174*/

#include
int main()
{
    long long int number,t1,t2,cnt,m,t,i;
	while(scanf("%lld %lld",&t1,&t2)!=EOF)
	{   
		m=0;//注意放在这,如果不在这cnt的值可能赋值不到m中,当m的值比较大时
		printf("%lld %lld ",t1,t2);
		if(t1>t2)
			{
				t=t1;
		        t1=t2;
			    t2=t;
		    }
		for(i=t1;i<=t2;i++)
		{
			number=i;//必须要有,如果直接用i在while中则发生死循环
			cnt=1;
			while(number!=1)
			{
				if(number%2==0)
					number=number/2;
				else
					number=number*3+1;
				cnt++;
			}
			if(cnt>m)
				m=cnt;
		}
		printf("%lldn",m);
	}
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5713895.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存