题意:
在所有的N位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对12345取余的值。
输入:
读入一个数n(1≤n≤1000)
输出:
输出有多少个数中有偶数个数字3。
样例输入:
2
样例输出:
73
提示
在所有的2位数字,包含0个3的数有72个,包含2个3的数有1个,共73个
解题思路:
可以用f[i][0]表示前i位有偶数个3的方案数,f[i][1]表示前i位有奇数个3的方案数
则状态转移方程可以表示为:f[i][0]=f[i-1][0]*9+f[i-1][1];f[i][1]=f[i-1][0]+f[i-1][1]*9;
边界条件:f[1][1]=1; f[1][0]=8;
程序代码:
/*
n=2时
偶数:30-39是1个+ 其他8个位数段都是9个 8*9+1
奇数:30-39是9个 + 其他8个位数段都是1个 1*9+8
*/
#include<cstdio>
#include<iostream>
using namespace std;
int main(){
int i, n;
int a[1050], b[1050];
a[1] = 1, b[1] = 8;
for(i = 2; i < 1050; i++){
b[i] = (b[i - 1] * 9 + a[i - 1]) % 12345; //偶数个3
a[i] = (a[i - 1] * 9 + b[i - 1]) % 12345; //奇数个3
}
cin>>n;
cout<<b[n];
return 0;
}