SPOJ上的硬币 - 每次都出现运行时错误(SIGSGEV)

时间:2014-12-24 06:08:37

标签: c

/ ********************************************** ************************************************** *********************************** 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;
}

1 个答案:

答案 0 :(得分:0)

问题表明n&lt; = 1000000000,并且在功能硬币中,你将使用arr [n],它绝对超出1000000的范围。

但我认为你是正确的方式〜

提示:考虑2 ^ 32&gt; 10亿,那么有多少子问题?