猜想:
对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次这样的变换,一定会使n变为1。例如,3→10→5→16→8→4→2→1。输入n,输出变换的次数。 n≤109 n≤10^9。

样例输入:
3
样例输出:
7

这道题很简单,只需要一个while循环即可解决:

#include <stdio.h>int main()
{int n, count = 0;scanf("%d", &n);while(n > 1){if(n % 2 == 1)n = n * 3 + 1;elsen /= 2;++count;}printf("%d", count);return 0;
}

但是上面的代码有个问题,题目中有 n≤109 n≤10^9,当输入为 987654321 时,输出为 1,结果显然是错误的。因为 987654321 时奇数,乘以 3 再加上 1 后等于 2.962962964×109 2.962962964\times10^9,已经超过了int32类型的范围 [-2147483648,2147483647],那么可以使用long long 来替代,但是输入时需要使用%lld,或者%I64d。所以为了避免这种不确定性,可以在输入的时候使用32位整数,而计算的时候使用long long。改进后的代码如下:

#include <stdio.h>int main()
{int n2, count = 0;scanf("%d", &n2);long long n = n2;while(n > 1){if(n % 2 == 1)n = n * 3 + 1;elsen /= 2;++count;}printf("%d", count);return 0;
}

总结:当遇到输入不会超范围,而计算过程可能会超范围时,可以使用一种通用的数据类型来输入,然后使用另外一种范围更大的数据类型来计算。

C语言 3n+1问题相关推荐

  1. 1001 害死人不偿命的(3n+1)猜想 (15分) PAT (Basic Level) Practice (中文)C语言版

    PAT (Basic Level) Practice (中文) 1001 害死人不偿命的(3n+1)猜想 (15分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一 ...

  2. 3n 1数链问题设计程序c语言,C语言程序设计刚架程序流程.ppt

    程序需要的主要数据,struct ND_COORD { // 定义结构体类型 int n; //结点总数 float *x; // 结点坐标 }; // *x相当于 x[2n]; x[n],y[n]. ...

  3. 1005 继续(3n+1)猜想 (25 分)(c语言实现)

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

  4. 【C语言】PAT乙级:1005 继续(3n+1)猜想

    #include <stdlib.h> #include <stdio.h> void bubble_sort(int arr[], int len); int main(vo ...

  5. PAT 乙级 1001 害死人不偿命的(3n+1)猜想(C语言)

    #include <stdio.h> int main() {int i=0,n;scanf("%d",&n);while(n!=1){if(n%2==1){n ...

  6. 学生选课管理系统c语言程序报告,c语言课程设计学生选课管理系统实验报告.doc...

    课程设计报告 课程设计题目:学生选课管理系统 学 号 姓 名:李唐松 专 业:软件工程 班 级: 091107 指导老师:谢小林 2009年1月5 *实验题目: 学分管理程序 *实验时间与地点:200 ...

  7. c语言字符串文库总结,C语言字符串.ppt

    C语言字符串.ppt ACM程序设计,福州大学至诚学院 冯新,第四讲,字符串处理,常用函数介绍,复制,char* strcpy char *s1, const char *s2; 将字符串s2复制到s ...

  8. 万年历c语言编程代码_C语言高效编程与代码优化~

    译文链接:http://www.codeceo.com/article/c-high-performance-coding.html 英文原文:https://www.codeproject.com/ ...

  9. Collatz猜想 (Hailstone)(3n + 1猜想)

    Collatz猜想 (3n+1猜想) 这是是一个著名的数学问题,至今没有证明其正确性,也没证明其是错误的,即任何一个正整数N,如果是偶数的话就除以2,如果是奇数的话就乘以3再加上1,最后这个数都会变为 ...

最新文章

  1. 季节前面为什么用in_英语语法大全,用这16首歌诀记高效又有趣!
  2. Android adb opendir failed ,permission denied
  3. 特殊的IP地址与端口
  4. 《图解HTTP》读书笔记--第2章简单的HTTP协议
  5. 手机zip模拟器_【教程】萌新手机krkr2模拟器运行教程
  6. 各种编码范围总结以及linux下面的编码批量转化
  7. c构造函数和析构函数_C ++构造函数和析构函数| 查找输出程序| 套装2
  8. PHP 将json的stdClass Object转成数组array
  9. C语言及程序设计进阶例程-30 联合体及其应用
  10. ubuntu中firefox图片有色差问题
  11. UDP与TCP报文格式,字段意义
  12. matlab2010反复激活
  13. 概要设计说明书的书写
  14. vue3中使用Web Worker多线程
  15. 马赛克效果,通过PS把迪丽热巴制作成马赛克效果
  16. AJAX实验(添加+模糊查询 图书)
  17. js 中国标准时间,时间戳 ,yyyy-mm-dd格式之前相互转换
  18. http code码详解
  19. 植物大战僵尸超全资源合集
  20. 冒泡排序【必会知识】

热门文章

  1. 移动端及APP测试概述
  2. RGBA 与 opacity不得不说的故事
  3. redis统计用户日活量_Redis精确去重计数方法(咆哮位图)
  4. 游戏思考17:寻路引擎recast和detour学习二:recast导航网格生成流程\源码剖析流程\局限性,附录计算点线面举例代码
  5. RTX3070、3070Ti相当于什么水平?
  6. 牛客练习赛63 F 牛牛的树行棋 (SG函数+树差分)
  7. Redis中jedis与lettuce区别
  8. matlab如何在地图上绘制圆圈
  9. “华为杯”研究生数学建模竞赛2020年-【华为杯】E题:能见度估计与预测(附获奖论文及python代码实现)
  10. 面向对象设计思想总结及代码