nyoj-1017-偶数个3

来源:互联网 发布:伴随矩阵怎么求例子 编辑:程序博客网 时间:2024/04/30 06:19

偶数个3

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述

在所有的N位数中,有多少个数中有偶数个数字3?

 

输入
第一行为一个整数T,代表有T组数据。(T<10000)
接下来T行,每行一个正整数N。(1<=N<=1000)
输出
每行输出一个整数,即方案数(由于结果可能很大,你只需要输出这个答案mod 12345的值。)。
样例输入
12
样例输出
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;}


0 0