偶数个3
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
在所有的N位数中,有多少个数中有偶数个数字3?
-
输入
-
第一行为一个整数T,代表有T组数据。(T<10000)
接下来T行,每行一个正整数N。(1<=N<=1000)
输出
- 每行输出一个整数,即方案数(由于结果可能很大,你只需要输出这个答案mod 12345的值。)。 样例输入
-
1 2
样例输出
-
73
递推题,先写几组数据,找出规律
//刚开始写的 #include<stdio.h> #include<string.h> int a[1010][1010]; int main() { int s,n,i,j; memset(a,0,sizeof(a)); a[1][0]=8; a[1][1]=1; for(i=2;i<1002;i++) { a[i][0]=a[i-1][0]*9%12345; a[i][i]=1; for(j=1;j<i;j++) a[i][j]=(a[i-1][j-1]+a[i-1][j]*9)%12345; } scanf("%d",&s); while(s--) { int sum=0; scanf("%d",&n); for(i=0;i<=n;i++) if(i%2==0) sum=(sum+a[n][i])%12345; printf("%d\n",sum); } return 0; } //优化后 #include<stdio.h> int a[1001][2]; int main() { int s,n,i; a[1][0]=1;a[1][1]=8; a[2][0]=17;a[2][1]=73; a[3][0]=226;a[3][1]=674; for(i=4;i<1001;i++) { a[i][0]=(a[i-1][0]*9+a[i-1][1])%12345; a[i][1]=(a[i-1][0]+a[i-1][1]*9)%12345; } scanf("%d",&s); while(s--) { scanf("%d",&n); printf("%d\n",a[n][1]); } return 0; }
-
第一行为一个整数T,代表有T组数据。(T<10000)