记录洛谷冰雹猜想的实现过程
记录C语言冰雹猜想的实现过程
文章目录
- 记录C语言冰雹猜想的实现过程
- 问题引入
- 一、冰雹猜想问题分析
- 二、代码实现
- 写在最后
问题引入
冰雹猜想:任一正整数x,如果x是奇数就乘以3加1,如果是偶数就除以2,反复计算,最终都将会得到数字1。
一、冰雹猜想问题分析
冰雹猜想的思路很简单,洛谷上有道引用冰雹猜想的题:
先分析一下样例 的实现过程:
二、代码实现
(这是个错误的代码,来分析一下问题)
#include<stdio.h>
int main()
{int i,j,n,m,a[100],t,k=0;scanf("%d",&n);m=n;for(i=0;;i++){ if(n%2==0)/*判断n是否为偶数*/{for(i=0;;i++){t=n/2;a[k++]=t;n=t;if(n%2!=0)break ;}}else{for(i=0;;i++){t=3*n+1;a[k++]=t;/*k可以作为新数组的下表,同时也起到计数器的作用*/n=t;if(n%2==0)break;}}if(n==1)break;/*控制外循环的条件是n为1*/}for(i=k-1;i>=0;i--)/*新数组里有k个元素,因此输出数组时对应下标为0-k-*/{printf("%d ",a[i]);}printf("%d",m);/*新数组并没有把最初的n放进去,因此还要输出n本身,由于经过上面的循环n的值已经改变,所以前面把原始的n储存在m中,这里输出m即为输出原始的n*/}
大体思路没什么问题,但是有两个测试点没通过
于是我运行了一下,发现错在“1”这里
也就是说当程序认为1为奇数,输入1后进行了3*1+1的计算,但是题中的要求是如果输入1,输出结果也为1,所以我又把输入1和非1的情况分开了
#include<stdio.h>
int main()
{int i,j,n,m,a[100],t,k=0;scanf("%d",&n);m=n;if(n!=1)/*在这里做了修改*/{for(i=0;;i++){ if(n%2==0){for(i=0;;i++){t=n/2;a[k++]=t;n=t;if(n%2!=0)break ;}}else{for(i=0;;i++){t=3*n+1;a[k++]=t;n=t;if(n%2==0)break;}}if(n==1)break;}for(i=k-1;i>=0;i--){printf("%d ",a[i]);}printf("%d",m);}elseprintf("1");
}
现在输入1的问题解决了
但是最后一个测试点还是有问题
搜索了这个报错的原因,如下图。还是不知道该如何解决这个问题,于是我换了一种思路
正确的代码在这里!
#include<stdio.h>
int main()
{int n;scanf("%d",&n);int a[200];int i;int count=0;/*换回了计数器的方法*/for(i=0;;i++){if(n%2==0){a[i]=n;n=n/2;if(a[i]==1)break;}else{a[i]=n;n=n*3+1;if(a[i]==1)break;}count++;}for(i=count;i>=0;i--){printf("%d ",a[i]);}return 0;
}
终于通过了!
写在最后
关于那个报错还是有点不理解,是代码写错了还是其他问题,希望大家多多指教
记录洛谷冰雹猜想的实现过程相关推荐
- 刷题记录:洛谷P4147玉蟾宫
传送门:洛谷 题目描述: 这片土地被分成 N × M N\times M N×M 个格子,每个格子里写着 'R' 或者 'F',R 代表这块土地被赐予了 rainbow,F 代表这块土地被赐予了 fr ...
- 做题记录 洛谷P1230 智力大冲浪
题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...
- p5727深基5.例3冰雹猜想c语言,深基
欸嘿,典型的求解第k小的数的问题 算法中使用了快速排序 关键之处在于原本快排需要两边都进行排序,但现在我们只关心第k小的数,所以,如果在ll比k大那么就排左半边,比k小就比右半边,从而实现时间复杂度的 ...
- 洛谷刷题C语言:距离函数、闰年展示、计算阶乘、猴子吃桃、培训
记录洛谷刷题QAQ 一.[深基7.例1]距离函数 题目描述 给出平面坐标上不在一条直线上三个点坐标 (x1,y1),(x2,y2),(x3,y3)(x_1,y_1),(x_2,y_2),(x_3,y_ ...
- 洛谷日常刷题(洛谷官方题单 思路+详解)
目录 前言 非官方题单的题 P1141 01迷宫 1-4 递推与递归 P1255 数楼梯 1002 [ NOIP 2002 普及组]过河卒 P1044 [NOIP2003 普及组] 栈 P1028 [ ...
- 洛谷刷题:明明的随机数、质因数分解、不高兴的津津、津津对的储存计划和车厢重组
记录洛谷刷题过程QAQ 一. [NOIP2006 普及组] 明明的随机数 题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N N N 个 1 1 1 到 1 ...
- scratch数学编程100例_《scratch编程+数学》课程:编程实现数字黑洞冰雹猜想
冰雹猜想就是指随便给出一个自然数,如果是奇数,那么就给这个数乘以3再加上1:如果是偶数就除以2:依次不停地进行重复计算,可以发现无论这个过程中的数值如何庞大,最终还是会像冰雹一样坠落,变成1,因此就把 ...
- 洛谷刷题C语言:数字反转、再分肥皂水、三角形面积、Apples Prologue/苹果和虫子、数的性质
记录洛谷刷题QAQ,一些不大优雅的代码 一.[深基2.例7]数字反转 题目描述 输入一个不小于 100100100 且小于 100010001000,同时包括小数点后一位的一个浮点数,例如 123.4 ...
- 洛谷刷题C语言:Even? Odd? G、The Robot Plow G、pb的游戏(1)、询问学号、cover
记录洛谷刷题QAQ 一.[USACO09OCT]Even? Odd? G 题目描述 Bessie's cruel second grade teacher has assigned a list of ...
最新文章
- 数据结构与算法(C++版)
- Oracle数据库表信息,序列,视图等导出,导入。(数据库备份和恢复)
- c++ 线程什么时候run_阿里后端Java面试题:启动线程是start()还是run()?为什么?...
- i春秋DMZ大型靶场实验(四)Hash基础
- HBase读链路分析
- 使用 Redis 如何实现延迟队列?
- 动态规划—最长上升子序列(POJ 1458)
- java 开发银行支付、对账时证书相关的操作总结
- Jenkins 集成Ansible教程
- 啊哈C语言 第8章 游戏时间到了(第29讲)
- 电路故障检测与调试分析
- HDU-1527-取石子游戏【威佐夫博弈】
- [论文总结] 深度学习在农业领域应用论文笔记10
- 基于Java(SSM)+MySQL的二手书籍交易系统【100010084】
- 【Python打卡2019】20190406之货币兑换
- Unity 时装换色
- 原生js监听滚动条_原生JS实现滚动条监听
- 笔试题-跳格子游戏,Java代码
- Flutter 如何监听页面在前台还是后台
- 仙山瑶池,灵水神泉”的美誉