当前位置: 代码迷 >> C语言 >> 大家帮我看看这个关于动态规划的问题,谢谢!!!!!!!!!!!!!!
  详细解决方案

大家帮我看看这个关于动态规划的问题,谢谢!!!!!!!!!!!!!!

热度:155   发布时间:2008-05-06 16:27:53.0
大家帮我看看这个关于动态规划的问题,谢谢!!!!!!!!!!!!!!
#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呢????????????
还有,作为动态规划,我的方法是不是不好??用递归是不是好一些?????

谢谢各位达人们啊....
搜索更多相关的解决方案: 动态规划  

----------------解决方案--------------------------------------------------------
aa[a] = i;

if (aa[temp] == 0)

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

[color=white]

[[it] 本帖最后由 雨中秣燕 于 2008-5-6 16:32 编辑 [/it]]
----------------解决方案--------------------------------------------------------
考虑过,不过在输入1 2000的时候应该是不会越界的阿!!!!因为一个小于2000的数字不论算奇数,偶数,他们按照上面的法则计算出来的结果应该不会超过10000,所以这个输入数组不会越界吧
----------------解决方案--------------------------------------------------------
不要“应该”怎么怎么,“应该”不会不会
你保证了一定不会吗??你验证过了??

[color=white]
----------------解决方案--------------------------------------------------------
是的,一定不会越界在1 2000输入的时候.
----------------解决方案--------------------------------------------------------
明明提示了你
你却硬说一定不会越界,随便你吧

[color=white]
----------------解决方案--------------------------------------------------------
哎,数学没有学好,但是我还是不明白,1 2000里面有数字能通过那个奇数偶数的换算法则达到超过100000的范围阿??

请指点一二,谢谢!!
----------------解决方案--------------------------------------------------------
你自己不是已经有程序?你咋不自己试验呢

[color=white]
----------------解决方案--------------------------------------------------------
哎,我测试过了,在输入2000的时候,temp最大可以达到1276936,超过了数组最大的范围,越界。谢谢燕子。。
----------------解决方案--------------------------------------------------------
  相关解决方案