标题:大家帮我看看这个关于动态规划的问题,谢谢!!!!!!!!!!!!!!
只看楼主
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
 问题点数:0 回复次数:8 
大家帮我看看这个关于动态规划的问题,谢谢!!!!!!!!!!!!!!
#include <stdio.h>
#define MAX 100001
int count1(int a, int aa[]);

int main(void)
{
    int a, b, m, max=0, i, temp;
    static int aa[MAX] = {0};
    while (scanf("%d %d", &a, &b)!=EOF)
    {
         if (a>b)
         {
            temp=a;
            a=b;
            b=temp;
        }
        for (i=a; i<=b; i++)
        {
             m=count1(i, aa);
             if (m>max)
             {
                max=m;
            }
        }
        printf("%d\n", max);
        max=0;
        for (i=0; i<100001; i++)
        {
             if (aa[i]!=0)
             {
                printf(" aa[%d]=%d ", i, aa[i]);
            }
        }
    }
    return 0;
}

int count1(int a, int aa[]) {
    if (aa[a]!=0)
    {
        return aa[a];
    }
    int i = 0;
    int temp = a;
    while (temp != 1) {
        if (aa[temp] == 0) {
            i++;
        }
        else {
            i += aa[temp];
            break;
        }
        if (temp % 2 == 0) {           
                temp = temp / 2;
        }
        else {
            temp = 3 * temp + 1;
        }
    }
    aa[a] = i;
    return i;
}

为什么在输入1 2000的时候会有runtime error呢????????????
还有,作为动态规划,我的方法是不是不好??用递归是不是好一些?????

谢谢各位达人们啊....
搜索更多相关主题的帖子: 动态规划 
2008-05-06 16:27
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
得分:0 
aa[a] = i;

if (aa[temp] == 0)

有考虑过这一步会数组越界吗???

[color=white]

[[it] 本帖最后由 雨中飛燕 于 2008-5-6 16:32 编辑 [/it]]
2008-05-06 16:31
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
得分:0 
考虑过,不过在输入1 2000的时候应该是不会越界的阿!!!!因为一个小于2000的数字不论算奇数,偶数,他们按照上面的法则计算出来的结果应该不会超过10000,所以这个输入数组不会越界吧

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-06 16:40
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
得分:0 
不要“应该”怎么怎么,“应该”不会不会
你保证了一定不会吗??你验证过了??

[color=white]
2008-05-06 16:43
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
得分:0 
是的,一定不会越界在1 2000输入的时候.

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-06 16:49
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
得分:0 
明明提示了你
你却硬说一定不会越界,随便你吧

[color=white]
2008-05-06 16:54
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
得分:0 
哎,数学没有学好,但是我还是不明白,1 2000里面有数字能通过那个奇数偶数的换算法则达到超过100000的范围阿??

请指点一二,谢谢!!

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-06 16:59
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
得分:0 
你自己不是已经有程序?你咋不自己试验呢

[color=white]
2008-05-06 17:03
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
得分:0 
哎,我测试过了,在输入2000的时候,temp最大可以达到1276936,超过了数组最大的范围,越界。谢谢燕子。。

前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-07 10:23



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-212760-1-1.html




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

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