| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 788 人关注过本帖
标题:高手来看什么问题?
取消只看楼主 加入收藏
wujingqian
Rank: 1
来 自:遥远的星球
等 级:新手上路
帖 子:77
专家分:2
注 册:2008-3-12
结帖率:100%
收藏
 问题点数:0 回复次数:4 
高手来看什么问题?
我用了递归,刚学的动态规划,出现了问题,请帮帮忙!!

问题描述:
这是一个古老的猜想:给定任何一个正整数n,对它进行以下操作:
n是偶数:n=n/2
n是奇数:n=3*n+1
这样经过多步操作后,最后必定变为1
如对13进行操作: 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1
一共经历了9次操作,则称13这个数的周期是9

输入:
多组测试数据,每组一行,一行里有两个数m和n,
请你找出m和n之间(包括m,n)的周期最大的数的周期
其中m,n均为小于或者等于1e5的正整数

输出:
m,n之间周期最大的数的周期,一个结果单独占一行

样例输入:
1 10
2 3
30 100

样例输出:
19
7
118

难度:Easy
#include<stdio.h>
long f(long n)
{
      static long a[100000] = {0};
      if(a[n] != 0)
      return a[n];
      a[1] = 1;
      while(a[n] != 1)
      {
                 if(n%2 == 0)
                 {
                        a[n] = f(n/2) + 1;
                 }
                 else
                 {
                      a[n] = f(3*n + 1) + 1;
                 }
      return a[n];
      }
      return a[n];
}
int main()
{
    long i, m, n, max;
    while(scanf("%ld%ld", &m, &n) != EOF)
    {
    if(m > n)
    {
         max = m;
         m = n;
         n = max;
    }
    max = 0;                     
    for(i=0; i<n-m+1; i++)
    {
             if(f(m + i) > max)
             max = f(m + i);
    }
    printf("%ld\n", max-1);
    }
    return 0;
}
 
Name: "wjq" Problem ID "36"
Submit Time: 2008/4/26-13:04

G++: Compile OK

Test  1:    Accepted    Time = 0 ms
Test  2:    Runtime Error
--------------------------------
Problem ID     36
Test Result    Runtime Error
Total Time     NULL
Total Memory   296 Kb / 10000 Kb
Code Length    808 Bytes
搜索更多相关主题的帖子: 周期 整数 动态规划 偶数 
2008-04-26 13:12
wujingqian
Rank: 1
来 自:遥远的星球
等 级:新手上路
帖 子:77
专家分:2
注 册:2008-3-12
收藏
得分:0 
Runtime Error——运行时错误。发生了非法内存访问或者用0做除数或者堆栈溢出等
2008-04-26 13:16
wujingqian
Rank: 1
来 自:遥远的星球
等 级:新手上路
帖 子:77
专家分:2
注 册:2008-3-12
收藏
得分:0 
谢谢了,不过会超时间
2008-04-27 11:58
wujingqian
Rank: 1
来 自:遥远的星球
等 级:新手上路
帖 子:77
专家分:2
注 册:2008-3-12
收藏
得分:0 
http://
2008-04-27 12:11
wujingqian
Rank: 1
来 自:遥远的星球
等 级:新手上路
帖 子:77
专家分:2
注 册:2008-3-12
收藏
得分:0 
用动规很多数据是应该快很多,例如13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1,13一共9次,40就是8次了,20就是7次...把每个数记录下来,用的时候就不用再计算.
2008-04-27 12:17
快速回复:高手来看什么问题?
数据加载中...
 
   



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

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