学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

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

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

#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呢????????????
还有,作为动态规划,我的方法是不是不好??用递归是不是好一些?????

谢谢各位达人们啊....

TOP

aa[a] = i;

if (aa[temp] == 0)

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



[ 本帖最后由 雨中飛燕 于 2008-5-6 16:32 编辑 ]
C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

考虑过,不过在输入1 2000的时候应该是不会越界的阿!!!!因为一个小于2000的数字不论算奇数,偶数,他们按照上面的法则计算出来的结果应该不会超过10000,所以这个输入数组不会越界吧
前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。

TOP

不要“应该”怎么怎么,“应该”不会不会
你保证了一定不会吗??你验证过了??

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

是的,一定不会越界在1 2000输入的时候.
前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。

TOP

明明提示了你
你却硬说一定不会越界,随便你吧

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

哎,数学没有学好,但是我还是不明白,1 2000里面有数字能通过那个奇数偶数的换算法则达到超过100000的范围阿??

请指点一二,谢谢!!
前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。

TOP

你自己不是已经有程序?你咋不自己试验呢

C/C++讨论群:46520219 3996098 21035626 57909089
免费的C/C++算法学习论坛:http://yzfy.org

TOP

哎,我测试过了,在输入2000的时候,temp最大可以达到1276936,超过了数组最大的范围,越界。谢谢燕子。。
前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。

TOP

发新话题