解析: 看代码就知道我怎么做了,我用的的递推打表,不断记录原先的数据以防止重复计算。
#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; }