1006
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;
}
Input
Input starts with an integer T (≤ 100),denoting the number of test cases.
Each case contains seven integers, a, b, c, d, e, f and n.All integers will be non-negative and0 ≤ n ≤ 10000 and the eachof the others will be fit into a 32-bit integer.
Output
For each case, print the output of the given code. The given code may have integer overflow problem in the compiler, so be careful.
Sample Input | Output for Sample Input |
5 0 1 2 3 4 5 20 3 2 1 5 0 1 9 4 12 9 4 5 6 15 9 8 7 6 5 4 3 3 4 3 2 54 5 4 | Case 1: 216339 Case 2: 79 Case 3: 16636 Case 4: 6 Case 5: 54 |
这道题目涉及到超时跟数据溢出。。。。
#include<stdio.h>
int a, b, c, d, e, f,sum[10001],i;
int fn( int n ) {
sum[0]=a%10000007;sum[1]=b%10000007;sum[2]=c%10000007;sum[3]=d%10000007;sum[4]=e%10000007;sum[5]=f%10000007;
for(i=6;i<=10000;i++){sum[i]=(sum[i-1]+sum[i-2]+sum[i-3]+sum[i-4]+sum[i-5]+sum[i-6])% 10000007;}
return sum[n];
}
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));
}
return 0;
}
在防止数据溢出过程中发现取膜是的可以随便拆项,哈哈;
代码效率方面我相信只要仔细想下,就可得出结论。。。。。
刚发现一位大神,他的c代码如下:
-
#include <stdio.h>
-
-
int arr [ 6 ] ;
-
int main ( )
-
{
-
int test ,n ,i ,caseno = 0 ;
-
-
scanf ( "%d" ,&test ) ;
-
-
while (test -- )
-
{
-
scanf ( "%d %d %d %d %d %d %d" ,&arr [ 0 ] ,&arr [ 1 ] ,&arr [ 2 ] ,&arr [ 3 ] ,&arr [ 4 ] ,&arr [ 5 ] ,&n ) ;
-
-
for (i = 6 ;i <=n ;++i )
-
arr [i % 6 ] = ( ( long )arr [ (i - 1 ) % 6 ] +arr [ (i - 2 ) % 6 ] +arr [ (i - 3 ) % 6 ] +arr [ (i - 4 ) % 6 ] +arr [ (i - 5 ) % 6 ] +arr [ (i - 6 ) % 6 ] ) % 10000007 ;
-
-
-
printf ( "Case %d: %d\n" ,++caseno ,arr [n % 6 ] % 10000007 ) ;
-
-
}
-
return 0 ;
-
}