解析:  看代码就知道我怎么做了,我用的的递推打表,不断记录原先的数据以防止重复计算。

#include <stdio.h>
static int fun5(int n);
static int fun10(int n);
static int fun25(int n);
static int fun50(int n);
int a[10000], b[10000], c[10000];
int main()
{
    int n ,i;
    for(i = 0; i < 7500; i++)
        a[i] = fun10(i);
    for(i = 0; i < 7500; i++)
        b[i] = fun25(i);
    for(i = 0; i < 7500; i++)
        c[i] = fun50(i);
    while(scanf("%d", &n) == 1)
        printf("%d\n", c[n]);
    return 0;
}
static int fun5(int n)
{
    return n/5+1;
}
static int fun10(int n)
{
    int m = 0;
    while(n >= 0){
        m += fun5(n);  
        n -= 10;      
    }
    return m;
}
static int fun25(int n)
{
    int m = 0;
    while(n >= 0){
        m += a[n];
        n -= 25;
    }
    return m;
}
static int fun50(int n)
{
    int m = 0;
    while(n >= 0){
        m += b[n];
        n -= 50;
    }
    return m;
}