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,纠结啊...

C语言 3n+1问题

猜想: 对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次这样的变换,一定会使n变为1。例如,3→10→5→16→8→4→2→1。输入n,输出变换的次数。n≤10...
  • Artprog
  • Artprog
  • 2017-01-27 13:42:06
  • 490

3n+1问题 C语言实现

  • 2011年01月19日 15:51
  • 1KB
  • 下载

ACM 3n+1问题

[问题描述] * 考虑如下的序列生成算法: 从整数 n 开始,如果 n 是偶数,把它除以 2;如果 n 是奇数, 把它乘 3 加1。用新得到的值重复上述步骤,直到 n = 1 时停止。 例如,n =...
  • wangxiaokunNO1
  • wangxiaokunNO1
  • 2017-04-26 22:23:48
  • 999

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

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

csdn编程练习之3n+1

题目详情: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950年的世界数学家大会上...
  • u013053268
  • u013053268
  • 2015-03-16 18:07:04
  • 248

(挑战编程1_1)The 3n+1 problem

题目链接:http://www.programming-challenges.com/pg.php?page=downloadproblem&probid=110101&format=html ...
  • leileicaocao
  • leileicaocao
  • 2013-05-25 12:32:47
  • 414

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

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

1001. 害死人不偿命的(3n+1)猜想 (15)——做题纪录

PAT考试前刷题纪录
  • schostel
  • schostel
  • 2016-03-13 21:08:53
  • 407

[sicily]1293. 3n+1数链问题

1293. 3n+1数链问题 Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description 在计算机科学上,有很多类问题是...
  • luohuang0423
  • luohuang0423
  • 2015-10-19 20:01:14
  • 505

C语言面试题大汇总

 static有什么用途?(请至少说明两种)1.限制变量的作用域2.设置变量的存储域7. 引用与指针有什么区别?1) 引用必须被初始化,指针不必。2) 引用初始化以后不能被改变,指针可以改变所指的对象...
  • Suprman
  • Suprman
  • 2006-12-29 15:47:00
  • 57468
收藏助手
不良信息举报
您举报文章:C语言每日小练(一)——3n+1问题
举报原因:
原因补充:

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