3n+1_problem_Uva

这道题,其实说难也难,说简单也简单,关键在其测试数据。如果测试数据很苛刻,就很难了(参看博客UVa Problem 100 The 3n+1 problem (3n+1 问题))。

这里,我要写两点想法:第一,题目中说求数字i,j之间的最大循环节长度,但是样例输入却都是按min,max的顺序给出,这让我们产生了一种错觉:输入就是按较小数、较大数输入的,这也是我多次TL的原因。记住:当题目要求模棱两可的时候,一定要注意其真正的意思,不要带入自己的观念。第二,我列举了10以内数的循环节长度,发现相邻两个数中奇数较大时,奇数的循环节长度一般比偶数的大;但是如果偶数较大时,这个就不成立,因此,当一个范围的最大数是偶数的时候,要单独计算其循环节长度,剩下的就归结为前一类情况了,也就可以只计算奇数的循环节长度(这里是不严格的推广)。另外,一个范围(min到max)内的大数部分(从max/2到max部分的数)比小数部分(min到max/2)的最大循环节长度大。所以有了下面的程序:

#include<stdio.h>
int main()
{
	int min,max,min_o,max_o;
	int i,tmp,rst,count;
	char input[100];

	while(gets(input))/*处理循环输入*/
	{
		rst = 0;
		sscanf(input,"%d %d",&min_o,&max_o);
		if(max_o > min_o )
		{
			min = min_o;
			max = max_o;
		}
		else
		{
			max = min_o;
			min = max_o;
		}
		
		if(max%2 == 0)/*单独处理偶数最大上限,下面只判断奇数*/
		{
			count = 0;
			tmp = max;
			while(tmp != 1)/*处理最大数*/
			{
				if(tmp%2 == 0)
					tmp /= 2;
				else tmp = tmp*3 + 1;

				count ++;
			}
			if(count > rst)/*记录最大数*/
				rst = count;
		}

		tmp = max/2;/*范围的大数部分*/
		if(tmp%2 == 0)
			tmp ++;

		if(tmp < min)/*修正范围*/
		{
			if(min%2 == 0)
				tmp = min + 1;
			else tmp = min;
		}

		for(i = tmp;i <= max;i += 2)/*循环这个范围内的大数那部分*/
		{
			tmp = i;
			count = 0;
			while(tmp != 1)/*处理每一个数*/
			{
				if(tmp%2 == 0)
					tmp /= 2;
				else tmp = tmp*3 + 1;

				count ++;
			}
			if(count > rst)/*记录最大数*/
			{
				rst = count;
			}
		}
		printf("%d %d %d\n",min_o,max_o,rst + 1);/*按输入的顺序输出i,j*/
	}
	
	return 0;
}



### 回答1: 3n + 1问题,也称为Collatz猜想,是一个数学问题,它涉及到一个简单的算法,即对于任何正整数n,如果n是偶数,则将其除以2,否则将其乘以3再加1。这个算法会一直重复执行,直到n等于1为止。虽然这个算法看起来很简单,但至今没有人能够证明对于所有正整数n都能够最终收敛到1。这个问题一直是数学界的一个谜题,吸引了许多数学家的关注和研究。 ### 回答2: “3n+1问题”也称为“Collatz猜想”,是解决数学领域中的一项经典问题。这个问题是对于每个正整数n,按照以下规则不断进行计算: (1) 如果n为奇数,计算3n +1; (2) 如果n为偶数,计算n/2; (3) 重复以上过程,直到n等于1为止。 猜想:无论初始值n是多少,经过有限次计算后一定会得到1。 在过去几十年中,无数数学家尝试用各种方法解决这个问题,但目前仍未找到证据切实有效的方法来证明猜想的正确性。 为此,勒内·斯塔迪在2005年为完全确定“3n+1问题”而创建了数字时限计划 ,该计划采用自由计算和验证方法,依赖众多志愿者的合作来解决这个难题。 事实上,这个问题并不仅仅只涉及到数学领域,它也有着重要的意义和应用价值。例如,可以通过优化算法来提高计算机的效率,甚至有人认为它与宇宙的本质有关。埃尔顿·M. 科贝尔因为此问题,在他的研究中发展出了一个术语“随机行走的周期时间”,并在研究自然环境的变化中提出了该术语的应用。 虽然迄今为止,人们仍未找到一个能够证明猜想正确与否的方法,但大量众志成城的项目,以及各种讨论和探寻的努力,让人们在探索数学的过程中,不断拓展了对于科学、技术、人类文化的认识和思考。 ### 回答3: 3n+1问题(The 3n+1 problem),也叫做Collatz猜想,是指对于所有正整数n,按照如下规则进行递归操作。如果n是偶数,则把它除以2得到n/2;如果n是奇数,则把它乘以3再加1得到3n+1。按照这样的规则反复操作,最终可以得到一个数列1,4,2,1,4,2,1……其中1是最终结果,也是所有数字都会到达的终点。 尽管3n+1问题规则很简单,但它一直是一个困扰数学家的难题。目前还没有人能够证明这个所有数字最终都可以到达1的规律,也没有人能够找到一个能够对所有数字进行快速计算的算法。因此,这个问题吸引了众多数学家和计算机科学家的关注,成为了一个经典的数学难题。 3n+1问题的研究不仅仅是理论的,也具有实际应用价值。例如,在计算机设计中,3n+1问题可以用于测试计算机处理器的运算能力和稳定性。实际上,世界上许多大型计算机系统都会对3n+1问题进行测试。 总之,3n+1问题是一个经典而复杂的数学难题,尽管它至今没有被完全证明,但是我们仍然可以通过研究和计算来探究这个问题,不断拓展我们对数论和计算机科学的认识和理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值