考拉斯猜想(冰雹猜想)用c语言完成?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了考拉斯猜想(冰雹猜想)用c语言完成?相关的知识,希望对你有一定的参考价值。
#include <stdio.h> int main() int num; scanf("%d,&num"); int cnt=1; while(num>=1) if(num%2==0) num /= 2; else num = num*3+1; printf("第%d次,%d\n",cnt,num); cnt++; return 0;
度娘自动排版有问题,看图
输入语句有误,应为
scanf("%d", &num);
参考技术A ? 程序如下: #include<stdio.h> int sushu(int n) int i,s; s=1; for(i=2;i<=n/2;i++) if(n%i==0) s=0; break; return s; int main() int n,i; for(i=6;i<1000;i=i+2) for(n=2;n<i;n++) if(sushu(n)) if(sushu(i-n)) printf( %d %d\n ,n,i-n); break; return 0; 为什么不能完全输出呢??好像只有一部分,如果把1000改为600以下又可以了。为什么? 进入cmd命令窗口,改窗口属性,把缓冲区改到1000行,再在这个窗口下运行你的程序,就可以上下的拉滚动条看到完整的输出 参考技术B ? 程序如下: #include<stdio.h> int sushu(int n) int i,s; s=1; for(i=2;i<=n/2;i++) if(n%i==0) s=0; break; return s; int main() int n,i; for(i=6;i<1000;i=i+2) for(n=2;n<i;n++) if(sushu(n)) if(sushu(i-n)) printf( %d %d\n ,n,i-n); break; return 0; 为什么不能完全输出呢??好像只有一部分,如果把1000改为600以下又可以了。为什么? 进入cmd命令窗口,改窗口属性,把缓冲区改到1000行,再在这个窗口下运行你的程序,就可以上下的拉滚动条看到完整的输出LQ0052 冰雹数枚举+角谷猜想
题目来源:蓝桥杯2016初赛 C++ C组G题
题目描述
任意给定一个正整数N,如果是偶数,执行: N / 2;如果是奇数,执行: N * 3 + 1
生成的新的数字再执行同样的动作,循环往复。
通过观察发现,这个数字会一会儿上升到很高,一会儿又降落下来。
就这样起起落落的,但最终必会落到“1”
这有点像小冰雹粒子在冰雹云中翻滚增长的样子。
比如N=9:9,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1
可以看到,N=9的时候,这个“小冰雹”最高冲到了52这个高度。
输入格式
输入存在多组测试数据,对于每组测试数据输入一行包含一个正整数N(N<1000000)
输出格式
对于每组测试数据,输出一行包含一个正整数表示答案
输入样例
10
100
输出样例
52
9232
问题分析
这个题实际上是角谷猜想的变形。
这个题的描述有BUG,其意思是对于给定的N, 从1-N计算角谷猜想的数列,找出最大值。
对于输出的N,用暴力法来实现是一种方法,但是会有很多重复的计算。
采用打表法会快许多。
需要注意的是,有可能数会比较大,要用long long类型。
AC的C语言程序(打表法)如下:
/* LQ0052 冰雹数 */
#include <stdio.h>
#include <string.h>
#define N 1000000 + 1
long long a[N];
long long geta(int n)
long long t = n, maxt = n;
while (t != 1)
if (t % 2 == 0)
t /= 2;
else
t = t * 3 + 1;
if (t <= N && a[t] != 0)
maxt = a[t] > maxt ? a[t] : maxt;
return maxt;
maxt = t > maxt ? t : maxt;
return maxt;
int main()
memset(a, 0, sizeof a);
a[1] = 1;
for (int i = 2; i <= N; i++)
long long t = geta(i);
a[i] = a[i - 1] > t ? a[i - 1] : t;
int n;
while (~scanf("%d", &n))
printf("%lld\\n", a[n]);
return 0;
AC的C语言程序(暴力)如下:
/* LQ0052 冰雹数 */
#include <stdio.h>
int main()
int n;
while (~scanf("%d", &n))
long long maxa = n;
for (int i = 2; i <= n; i++)
long long t = i;
while (t != 1)
if (t % 2 == 0) t /= 2;
else t = t * 3 + 1;
maxa = t > maxa ? t : maxa;
printf("%lld\\n", maxa);
return 0;
以上是关于考拉斯猜想(冰雹猜想)用c语言完成?的主要内容,如果未能解决你的问题,请参考以下文章