我的代码中的运行时错误
Runtime error in my code
我试图通过 SPOJ 解决这个问题:http://www.spoj.com/problems/COINS/ 使用记忆,但我一直收到运行时错误并且无法弄清楚原因。这是我的代码:
#include<stdio.h>
long long int max(long long int a,long long int b)
{
if(a >= b)
return a;
else
return b;
}
long long int dp[100000];
long long solve(long long int n)
{
long long ans;
if(n<=50000)
return dp[n];
else
ans=(n,solve(n/2)+solve(n/3)+solve(n/4));
return ans;
}
int main()
{
long long int n;
int t;
for(int i = 0;i <=50000;i++)
{
dp[i] = max(i,dp[i/2] + dp[i/3] + dp[i/4]);
}
while((scanf("%d",&t))>0)
printf("%lld",solve(n));
return 0;
}
问题很可能是因为:
while((scanf("%d",&t))>0)
printf("%lld",solve(n));
您正在阅读 t
但传递了未初始化的 n
。您可能想将 t
传递给 solve()
:
while((scanf("%d",&t))>0)
printf("%lld",solve(t));
出现运行时错误的原因
while((scanf("%d",&t))>0)
printf("%lld",solve(n));
在这里,您在变量 t
中获得输入,但将变量 n
传递给 solve
函数。对这两种情况都使用变量 t
或 n
。它会解决你的问题。
这里有几个问题:
在solve
中,你有ans = (n,solve(n/2)...);
前导的n
没有作用。您是否打算将其作为 max
的参数列表?如果是这样,您需要添加 max
。否则它只是一个逗号表达式,您不妨删除前导 n
.
在main
中,你对dp
的初始化有问题。考虑第一次通过循环,当 i
为 0 时。在这种情况下,i/2
等也将为零,因此那些 dp
值将是未定义的。尝试在循环外显式设置 dp[0]
,然后从索引 1
开始循环。
在 main
中打印解决方案时,您可能希望将换行符 \n
添加到 printf
格式字符串的末尾。
正如其他人所指出的,当从 main
调用 solve
时,您传递的是 n
而不是 t
。
我试图通过 SPOJ 解决这个问题:http://www.spoj.com/problems/COINS/ 使用记忆,但我一直收到运行时错误并且无法弄清楚原因。这是我的代码:
#include<stdio.h>
long long int max(long long int a,long long int b)
{
if(a >= b)
return a;
else
return b;
}
long long int dp[100000];
long long solve(long long int n)
{
long long ans;
if(n<=50000)
return dp[n];
else
ans=(n,solve(n/2)+solve(n/3)+solve(n/4));
return ans;
}
int main()
{
long long int n;
int t;
for(int i = 0;i <=50000;i++)
{
dp[i] = max(i,dp[i/2] + dp[i/3] + dp[i/4]);
}
while((scanf("%d",&t))>0)
printf("%lld",solve(n));
return 0;
}
问题很可能是因为:
while((scanf("%d",&t))>0)
printf("%lld",solve(n));
您正在阅读 t
但传递了未初始化的 n
。您可能想将 t
传递给 solve()
:
while((scanf("%d",&t))>0)
printf("%lld",solve(t));
出现运行时错误的原因
while((scanf("%d",&t))>0)
printf("%lld",solve(n));
在这里,您在变量 t
中获得输入,但将变量 n
传递给 solve
函数。对这两种情况都使用变量 t
或 n
。它会解决你的问题。
这里有几个问题:
在
solve
中,你有ans = (n,solve(n/2)...);
前导的n
没有作用。您是否打算将其作为max
的参数列表?如果是这样,您需要添加max
。否则它只是一个逗号表达式,您不妨删除前导n
.在
main
中,你对dp
的初始化有问题。考虑第一次通过循环,当i
为 0 时。在这种情况下,i/2
等也将为零,因此那些dp
值将是未定义的。尝试在循环外显式设置dp[0]
,然后从索引1
开始循环。在
main
中打印解决方案时,您可能希望将换行符\n
添加到printf
格式字符串的末尾。正如其他人所指出的,当从
main
调用solve
时,您传递的是n
而不是t
。