题目:
题目描述
在所有的N位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对12345取余的值。
输入输出格式
输入格式:
读入一个数N
输出格式:
输出有多少个数中有偶数个数字3。
输入输出样例
输入样例#1:
2
输出样例#1:
73
说明
【数据规模】 1<=N<=1000 【样例说明】 在所有的2位数字,包含0个3的数有72个,包含2个3的数有1个,共73个
思路:
f[i]表示i位数含奇数个3的数的个数,g[i]表示i位数含偶数个3的数的个数。
转移方程:
f[i]=(g[i-1]+f[i-1]*9)%md;
g[i]=(f[i-1]+g[i-1]*9)%md;
注意边界:f[1]=1,g[1]=8(不是9,首位不能为0)
代码:
#include<bits/stdc++.h>
using namespace std;
#define maxn 1000
#define md 12345
int n;
int f[maxn+5]={0},g[maxn+5]={0}; //奇、偶
int main(){
scanf("%d",&n);
f[1]=1,g[1]=8; //首位不能为0,所以偶数个1的一位数只有8种可能
for(int i=2;i<=n;i++){
f[i]=(g[i-1]+f[i-1]*9)%md;
g[i]=(f[i-1]+g[i-1]*9)%md;
}
printf("%d",g[n]);
return 0;
}