大家帮我看看这个关于动态规划的问题,谢谢!!!!!!!!!!!!!!
#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,超过了数组最大的范围,越界。谢谢燕子。。
----------------解决方案--------------------------------------------------------