| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 911 人关注过本帖
标题:出现Time Limit Exceed 求解 对于任意大于1的自然数n,如果n为奇数,则n=3n+ ...
只看楼主 加入收藏
光头强
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-10-1
结帖率:100%
收藏
已结贴  问题点数:14 回复次数:5 
出现Time Limit Exceed 求解 对于任意大于1的自然数n,如果n为奇数,则n=3n+1,否则n=n/2,则经过若干步骤后n一定会变成1
猜想:对于任意大于1的自然数n,如果n为奇数,则n=3n+1,否则n=n/2,则经过若干步骤后n一定会变成1;
如:3->10->5->16->8->4->2->1
共7步,
输入n,
输出变换次数

Input

输入n,
n<=1000000000

Output

变换次数

Sample Input


3
Sample Output


7
****************************
#include<stdio.h>

int main()
{
    int n=3;
    scanf("%d",&n);
    int i = 0;
    while(n != 1)
    {
        if(n % 2 )
            n = n * 3 + 1;
        else
            n /= 2;
        i ++;
    }
    printf("%d\n",i);

    return 0;
}
求大神们 给个解释 哪里需要改进下!!!
搜索更多相关主题的帖子: include 自然数 
2015-11-10 20:28
光头强
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-10-1
收藏
得分:0 
帮个忙呗!
2015-11-10 22:32
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:6 
这个超时的原因是测试过程中n超出int范围溢出,被按照负数计算造成死循环。

解决方法 换数据类型


[fly]存在即是合理[/fly]
2015-11-11 00:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:6 
错误原因3楼已经说过了,我给你两个峰值

当 n=670617279 时,有一个最大的结果 986
当 n=319804831 时,有一个最大的中间值 1414236446719942480,结果是 592
也就是你使用的类型最起码得存得下 1414236446719942480 这么大的数才行
做完了后,你可以用这两个数做验证


[此贴子已经被作者于2015-11-11 10:54编辑过]

2015-11-11 10:48
光头强
Rank: 1
等 级:新手上路
帖 子:34
专家分:0
注 册:2015-10-1
收藏
得分:0 
谢谢 亲们  解决了!!!
2015-11-11 15:58
快速回复:出现Time Limit Exceed 求解 对于任意大于1的自然数n,如果n为奇数,则 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026587 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved