http://acm.hust.edu.cn/vjudge/contest/121396#problem/G
int a, b, c, d, e, f;
int fn( int n ) {
if( n == 0 ) return a;
if( n == 1 ) return b;
if( n == 2 ) return c;
if( n == 3 ) return d;
if( n == 4 ) return e;
if( n == 5 ) return f;
return( fn(n-1) + fn(n-2) + fn(n-3) + fn(n-4) + fn(n-5) + fn(n-6) );
}
int main() {
int n, caseno = 0, cases;
scanf("%d", &cases);
while( cases-- ) {
scanf("%d %d %d %d %d %d %d", &a, &b, &c, &d, &e, &f, &n);
printf("Case %d: %d\n", ++caseno, fn(n) % 10000007);
}
return 0;
}
题意:跟上面的程序的主体一样,但现在要求你用另一种方法写出来,毕竟递归太费时了吧。。。
#include <iostream> #include <cstdio> #include <stdio.h> #include <string.h> using namespace std; typedef long long LL; #define maxn 11000 int p[maxn]; int main() { int T, n,t=1; scanf("%d", &T); while(T --) { for(int i=0; i<6; i++) { scanf("%d", &p[i]); p[i] %= 10000007; } scanf("%d", &n); for(int i=6; i<=n; i++) { p[i]=(p[i-1]+p[i-2]+p[i-3]+p[i-4]+p[i-5]+p[i-6])%10000007; } printf("Case %d: %d\n",t++, p[n]); } return 0; }