| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6443 人关注过本帖, 1 人收藏
标题:求助!!3n+1 问题怎么做?
取消只看楼主 加入收藏
安然之风
Rank: 2
等 级:论坛游民
帖 子:43
专家分:23
注 册:2011-1-6
结帖率:63.64%
收藏(1)
已结贴  问题点数:20 回复次数:4 
求助!!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
搜索更多相关主题的帖子: 自然数 
2011-04-04 14:06
安然之风
Rank: 2
等 级:论坛游民
帖 子:43
专家分:23
注 册:2011-1-6
收藏
得分:0 
不是作业!
涉及到乘法溢出问题。
探讨怎么A掉!
帮帮忙!
谢谢!
2011-04-04 14:27
安然之风
Rank: 2
等 级:论坛游民
帖 子:43
专家分:23
注 册:2011-1-6
收藏
得分:0 
真不是作业!
我的问题就是输入987654321(在10^9内),是合法数据,但结果却是意外的!第一次输出为-1332004332,它不大于1,。所以循环终止。
对于这个乘法溢出了,怎么解决?
还得请大侠们出手相助!!
#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",n);
  }
  printf("%d\n", count);
  return 0;
}
2011-04-04 23:53
安然之风
Rank: 2
等 级:论坛游民
帖 子:43
专家分:23
注 册:2011-1-6
收藏
得分:0 
谢谢各位的帮忙!!
我明白了。
这样就行了:
#include<stdio.h>
//#include<time.h>
#define MAX 1000000000
int main()
{
   double n;
  int count = 0;
  scanf("%lf", &n);
  if(n>1&& n<=MAX)
  {
     while(n > 1)
     {
        if((int)n % 2 == 1) n = n*3+1;
        else n /= 2;
         count++;
        printf("%.0lf\n",n);
     }
    printf("%d\n", count);
  }
 // printf("time used = %.8f\n",(double)clock()/CLOCKS_PER_SEC);
  return 0;
}








2011-04-05 00:31
安然之风
Rank: 2
等 级:论坛游民
帖 子:43
专家分:23
注 册:2011-1-6
收藏
得分:0 
回复 14楼 pangding
谢谢你的关注!
最近是在做某些OJ题,但在从中想把更多的细节错误避免。
所以还要继续向各位高手取经!!
恳请各位的批评指出!
不胜感激!!
2011-04-05 14:31
快速回复:求助!!3n+1 问题怎么做?
数据加载中...
 
   



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

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