1001. 害死人不偿命的(3n+1)猜想 (15)
2016-04-30 09:25
239 查看
卡拉兹(Callatz)猜想:
对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……
我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单地数一下,需要多少步(砍几下)才能得到n=1?
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。
输出格式:输出从n计算到1需要的步数。
输入样例:
3
输出样例:
5
*15分的题没什么好说的,模仿下文过程,加一个计数变量,代码如下
对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1
对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……
我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单地数一下,需要多少步(砍几下)才能得到n=1?
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。
输出格式:输出从n计算到1需要的步数。
输入样例:
3
输出样例:
5
*15分的题没什么好说的,模仿下文过程,加一个计数变量,代码如下
对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1
#include<stdio.h> int main() { int n; int i; scanf("%d",&n); i=0; while(n!=1){ i++; if(n%2==0) n/=2; else n=(3*n+1)/2; } printf("%d",i); return 0; }
相关文章推荐
- 《wonderful tonight》
- 表格的相关操作
- hive 建立表结构 ,添加分区
- php简单实现数组分页的方法
- MySQL语句大全:创建、授权、查询、修改
- c3p0的使用
- 算法练习2.Add Two Numbers 反向小数链表表示相加
- 练习三1010
- HDU 1505 City Game
- 4289: PA2012 Tax
- 小组评价
- 【c#】 面向对象的编程
- 如何查看JDK以及JAVA框架的源码
- 团队冲刺第九天
- VirtualBox和“VT-x/AMD-V 硬件加速在您的系统中不可用”
- JAVA中StringBuffer类常用方法
- 第九周学习进度条
- 算法练习1.Two Sum 数组两个和为目标值的下标(map)
- Eclipse启动报错”java was started but returned exit code=13”
- ZOJ-3329 One Person Game (概率DP)