#include <stdio.h>
#include <math.h>
// 算法竞赛的目标是编程对任意输入均得到正确的结果。
// 请先独立完成,如果有困难可以翻阅本书代码仓库中的答案,但一定要再次独立完成。
// “抓住主要矛盾”——始终把学习、实验的焦点集中在最有趣的部分。如果直观地解决方案行得通,就不必追究其背后的原理。
/**
【题目】3n+1问题
猜想:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。
经过若干次这样的变换,一定会使n变为1。例如,3→10→5→16→8→4→2→1。
输入n,输出变换的次数。n≤10^9(10的9次方)。
样例输入:
3
样例输出:
7
*/
/**
【分析】不难发现,程序完成的工作依然是重复性的:要么乘3加1,要么除以2,但这里循环的次数是不确定的,而且n也不是“递增”式的循环。这样的情况很适合
用while循环来实现。
*/
int main()
{
int n;
int count = 0;
scanf("%d",&n);
while(n!=1) {
if (n%2==1) { // 奇数
n = 3*n + 1;
} else {
n = n/2;
}
count ++ ;
}
printf("%d\n",count);
return 0;
}
3n+1问题
原创
©著作权归作者所有:来自51CTO博客作者TBHacker的原创作品,请联系作者获取转载授权,否则将追究法律责任
下一篇:lnmp升级php
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
N天爆肝数据库——MySQL(4)
对多表查询,事务以及体系结构进行知识总结和学习。
子查询 标量 插入图片 -
继续(3n+1)猜想
卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题
测试用例 ci i++ -
【PAT乙级】继续(3n+1)猜想
题目描述:卡拉兹(C
PAT 测试用例 ci i++ -
1005.继续(3n+1)猜想
卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。
c++ pat i++ #include 测试用例 -
PAT -1005 继续(3n+1)猜想
&nbs
#include i++ 测试用例 -
1005 继续(3n+1)猜想(JAVA)
1005 继续(3n+1)猜想(JAVA)
java 开发语言 i++ 测试用例 -
PAT 乙级 -- 1005 -- 继续(3n+1)猜想
题目简述 卡拉兹(Calla...
#include i++ 测试用例 -
1005. 继续(3n+1)猜想(Python)
1005. 继续(3n+1)猜想(Python)
python PAT 继续-3n+1-猜想 读入数据 赋值