3n+1 C语言练习

原创 2013年12月03日 12:36:50
在计算机科学上,有很多类问题是无法解决的,我们称之为不可解决问题。然而,在很多情况下我们并不知道哪一类问题可以解决,哪一类问题不可以解决。现在我们就有这样一个问题,问题如下: 
(1)输入一个正整数n; 
(2)把n显示出来; 
(3)如果n=1则结束; 
(4)如果n是奇数,则n变为3×n+1,否则n变为n/2; 
(5)转入第(2)步。 
例如对于输入的正整数22,应该有如下数列被显示出了: 
22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 
我们推测:对于任意一个正整数,经过以上算法最终会推到1。尽管这个算法很简单,但我们仍然无法确定我们的推断是否正确。不过好在我们有计算机,我们验证了对于小于1000000的正整数都满足以上推断。 
对于给定的正整数n,我们把显示出来的数的个数定义为n的链长,例如22的链长为16。 
你的任务是编写一个程序,对于任意一对正整数i和j,给出i与j之间的最长链长,当然这个最长链长是由i与j之间的其中一个正整数产生的,这里我们包括i和j.
输入
每个测试数据输入只有一行,包含2个正整数i和j(0 < i <= j < 10000).
输出
每个测试数据输出一行,即i与j之间的最长链长。
样例输入
1 10
样例输出

20


#include<stdio.h>
int main(){
	int ma(int *count,int);
	int a,b,i,j,count[10000],k,n,index=0;
	scanf("%d %d",&i,&j);
	for(a=i;a<=j;a++){
		k=1;
		n=a;
		while(n!=1){
			if(n%2==0){
				n=n/2;
			}
			else {
				n=3*n+1;
			}
			k++;
		}
		count[index++]=k;
	}
	printf("%d\n",ma(count,j-i+1));
	return 0;
	
}
int ma(int *count,int n){
	int i,ic=count[0];
	for(i=0;i<n;i++){
		ic=(ic>count[i]?ic:count[i]);
	}
	return ic;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

3n+1问题 用c语言实现

Consider the following algorithm to generate a sequence of numbers.Start with an integer n.If n is ...

C语言每日小练(一)——3n+1问题

例:3n+1问题 对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次变换,一定会使n变为1。例如3-》10-》5-》16-》8-》4-》2-》1。 输入n,输出...

PAT (Basic Level) Practise (中文)1005. 继续(3n+1)猜想 (25) C语言

1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B ...

一个中兴的面试题,输入两个数n和m,从数列1,2,3……n中随意取几个数,使其和等于m,要求将其中所有组合列出来编程求解(c语言递归函数分解法)

原题目:输入两个数n和m,从数列1,2,3……n中随意取几个数,使其和等于m,要求将其中所有组合列出来编程求解 c语言解法分析:            先判定n和m的大小,如果m小于n,则只需从1...

李洋疯狂C语言之n个人报数,报到3的退出,最后留在场上的是原来的第几位(约瑟夫环)

n个人报数,报到3的退出,最后留在场上的时原来的第几位 (约瑟夫环)

C语言强化(十)求 1+2+…+n | 要求:不使用关键字

一大早起来刷刷算法题,脑力劳动劳动,结果就发现了这么道神题~

Linux-C基础知识学习:C语言作业-输入m、n,并把m~n之间的不能被3整除的数输出

Linux基础知识学习 C语言作业:输入m、n,并把m~n之间的不能被3整除的数输出//输入m、n,并把m~n之间的不能被3整除的数输出 #include main(){ int i,count=...

扩展阅读 数学对编程的重要意义 C语言计算1,2,3,...,100的总和

题目:计算1+2+3+...+99+100的和 第一种方法,使用for循环,简单清晰明了         代码: #include int main() { int i = ...

在不使用*、/、+、-、%操作符的情况下,如何求一个数的1/3?(更新了一些解释,用C语言实)

方法是:http://stackoverflow.com/questions/11694546/divide-a-number-by-3-without-using-operators这里的,我对其进...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)