2 jefferyaung jefferyaung 于 2016.09.24 20:01 提问

pat乙级测试第一题(3*n+1)/2猜想,测试点为0,1,2时出错

#include
#include
int main()
{
int n, p, ts = 0;
scanf("%d", &n);
if (n == 0)
{
printf("0不是正整数");
}
if (n == 1)
{
printf("%d", ts);
}
while ((n > 1) && (n <= 1000))
{
if ((n % 2) == 0)
{
p = n / 2;
}
else
{
p = (3 * n + 1) / 2;
}
n = p;
ts = ts + 1;

}
printf("%d", ts);

}

4个回答

caozhy
caozhy   Ds   Rxr 2016.09.24 20:58
已采纳
caozhy
caozhy   Ds   Rxr 2016.09.24 20:58
qq_29594393
qq_29594393   Ds   Rxr 2016.09.24 20:11

说实话我是真心不懂(3*n+1)/2猜想是什么东西,你能详细描述一下你的问题,不然真心爱莫能助。

jefferyaung
jefferyaung 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展…… 我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过1000的正整数n,简单地数一下,需要多少步(砍几下)才能得到n=1?
大约一年之前 回复
sunrainamazing
sunrainamazing   2016.09.24 20:52

当n=0,1,2时分别对应
0不是正整数
0

0
0

1

Csdn user default icon
上传中...
上传图片
插入图片