/ ********************************************** ************************************************** *********************************** SPOJ上的硬币问题。" http://www.spoj.com/problems/COINS/& #34;。每次我都会收到运行时错误(SIGSGEV)。请帮助解决错误。它在我的机器上运行良好,我找不到任何问题。它也提供正确的输出。但是在SPOJ中它并没有被接受。 ************************************************** ************************************************** ********* /
#include<stdio.h>
long long arr[1000000]; /* Is this large number ok?*/
long long coins(long long n)/*Used recursion*/
{
if(n==0)
return 0;
if(arr[n]!=0)
return arr[n];
long long a,b,c,sum;
a=n/2;
b=n/3;
c=n/4;
sum=coins(a)+coins(b)+coins(c);
if(sum>n)
{
arr[n]=sum; /*Dynamic programming*/
return sum;
}
else
{
arr[n]=n; /*Dynamic programming*/
return n;
}
}
int main()
{
long long n;
while(scanf("%lld",&n))//Have doubt in this. Should it be while(scanf(...)!=EOF)
{
long long dollar=coins(n);
printf("%lld\n",dollar);
}
return 0;
}
答案 0 :(得分:0)
问题表明n&lt; = 1000000000,并且在功能硬币中,你将使用arr [n],它绝对超出1000000的范围。
但我认为你是正确的方式〜
提示:考虑2 ^ 32&gt; 10亿,那么有多少子问题?