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;
}


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

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

杀死人不偿命(3n+1)的猜想(c语言)

对任何一个自然数n,如果它是偶数,那么把它砍掉一半; 如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。 卡拉兹在1950年的世界数学家大会上公布了这个猜想...
  • LZXloveGYD
  • LZXloveGYD
  • 2017年04月29日 11:25
  • 618

PAT Basic 1005. 继续(3n+1)猜想 (25)(C语言实现)

题目 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对n=3进行验证...
  • Oliver__Lew
  • Oliver__Lew
  • 2017年05月18日 23:44
  • 1162

【C++】浙大PAT (Basic Level)1005. 继续(3n+1)猜想 (25)

#include #include #include using namespace std; int listIt(int n){ if(n%2==0){ ...
  • artemisrj
  • artemisrj
  • 2014年01月13日 14:16
  • 1024

1005.继续(3n+1)猜想(c语言)

卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对n=3进行验证的...
  • LZXloveGYD
  • LZXloveGYD
  • 2017年05月01日 19:05
  • 137

【1139】叙拉古猜想

描述: 叙拉古猜想又称科拉兹猜想、哈塞猜想、3n+1猜想、乌拉姆猜想或角谷猜想,是指对于每一个大于1的正整数,如果它是奇数,则将其乘3加1,如果它是偶数,则将除以2,如此循环,最终将得到1。 Sy...
  • qq_40560275
  • qq_40560275
  • 2017年10月23日 19:32
  • 47

一些可以使你感兴趣的c语言简单练习

在学习的过程中最重要的就是自己对所学的东西感不感兴趣,兴趣在我们学习的过程中会给我们一些动力,从而激发我们潜在的力量,今天就给大家介绍几种有意思的C语言练习题,从而使大家可以对C语言又不一样的学习态度...
  • Cell_KEY
  • Cell_KEY
  • 2016年03月29日 22:51
  • 2168

C语言--------------字符串小程序练习(一)

1、判断输入的字符串是否为“回文”(顺读和倒读都一样)字符串 #include #include #define N 100 int palindrome(char *s, int n)...
  • zyx6a
  • zyx6a
  • 2013年04月06日 22:55
  • 2692

C语言练习 文件操作

在C程序中使用文件,需要完成以下操作。 (1)声明一个FILE*类型的指针变量,程序通过改变量对所指向的文件进行操作。 (2)通过调用fopen函数将此变量和某个实际文件相联系,这一操作称为打开文...
  • hehe5229
  • hehe5229
  • 2017年03月08日 19:45
  • 220

[sicily]1293. 3n+1数链问题

1293. 3n+1数链问题 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description 在计算机科学上,有很多类问题是...
  • luohuang0423
  • luohuang0423
  • 2015年10月19日 20:01
  • 477
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3n+1 C语言练习
举报原因:
原因补充:

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