C语言每日小练(一)——3n+1问题

原创 2014年04月08日 17:48:34

例:3n+1问题

对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次变换,一定会使n变为1。例如3-》10-》5-》16-》8-》4-》2-》1。

输入n,输出变换的次数。n不大于10的九次幂。

样例输入:3

样例输出:7

解:直接模拟过程即可,下面是代码:

#include<stdio.h>
int main()
{
    int n, count = 0;
    scanf("%d", &n);
    while(n > 1)
    {
        if(n%2 == 1) n = n * 3 + 1;
        else n /= 2;
        count++;
    }
    printf("%d\n", count);
    return 0;
}
验证上面样例,发现正确:


那如果输入的是999999999呢?结果:


居然是1!原来是因为定义的n为int型整数,它的最大值为2147483647,也就是说,在程序刚刚执行了一次“n = 3*n+1”时,就已经溢出了,所以直接输出了1~所以只好用64位长整型了,程序如下:

#include<stdio.h>
int main()
{
    int count = 0;
    long long n;//定义64位长整型数
    scanf("%lld", &n);//此处"%lld"也可写成"%I64d"
    while(n > 1)
    {
        if(n%2 == 1) n = n * 3 + 1;
        else n /= 2;
        count++;
    }
    printf("%d\n", count);
    return 0;
}
下面看运行结果:


程序正常运行~

总结:在编写程序时,要注意定义的变量溢出的问题,否则很可能纠结于程序的逻辑正确与否上却发现怎么也找不出Bug,纠结啊...

3n+1问题 用c语言实现

Consider the following algorithm to generate a sequence of numbers.Start with an integer n.If n is ...
  • lifeqiuzhi521
  • lifeqiuzhi521
  • 2017年01月23日 11:08
  • 418

蓝桥杯-3n+1问题(例题)

“3n+1”问题:        对于任意大于1的自然数n,若该数为偶数则将其变为原来的一半,若为奇数则将其变为3n+1。反复进行上述过程,直到结果为1时停止。这就是著名的“3n+1”问题。要求输入...
  • cr496352127
  • cr496352127
  • 2016年11月01日 12:33
  • 498

PAT Basic 1005. 继续(3n+1)猜想 (25)(C语言实现)

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

zzu数学 实验四数列之3n+1问题

zzu数学 实验四数列之3n+1问题源代码示例series[a_] := Module[{a1 = a, an = {a}}, Do[a1 = If[Mod[a1, 2] == 1, 3 a...
  • lusongno1
  • lusongno1
  • 2016年08月24日 22:33
  • 373

3n+1数链问题--递归

数链问题 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 给定一个整数N,如果N是偶数,把它除以2;如果N是奇数,把它乘以...
  • qq_16255321
  • qq_16255321
  • 2014年07月01日 20:21
  • 1399

PAT 1005 乙等(继续(3n+1)猜想) c++

1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B ...
  • u013355886
  • u013355886
  • 2017年05月03日 12:56
  • 221

3n+1数链问题

3n+1数链问题 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 在计算机科学上,有很多类似的问题是无法解决...
  • guoqingshuang
  • guoqingshuang
  • 2015年11月13日 00:55
  • 270

PAT 1005 继续(3n+1)猜想(详解)

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

3n+1问题 用c语言实现

Consider the following algorithm to generate a sequence of numbers.Start with an integer n.If n is ...
  • lifeqiuzhi521
  • lifeqiuzhi521
  • 2017年01月23日 11:08
  • 418

PAT(乙级)1005. 继续(3n+1)猜想

题目: 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对n...
  • u012792707
  • u012792707
  • 2016年06月21日 20:46
  • 548
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C语言每日小练(一)——3n+1问题
举报原因:
原因补充:

(最多只允许输入30个字)