|
发表于 2024-12-4 13:08:36
|
显示全部楼层
网上找的吧
能看懂也行哦
#include<iostream>
#include<cstdio>
using namespace std;
const int mod=12345;
int num[1010][2];//二维数组num[i][j] 分别用来存储 i 位数时,含奇数个3的数的个数,含偶数个3的数的个数
int main()
{
int n;
num[1][0]=9; num[1][1]=1;//1位数时,含偶数个3的数有9个,包括0,含奇数个3的数有1个
scanf("%d",&n);
int x = num[1][0];
for (int i=2; i<=n; ++i)//循环类推
{
if (i==n)--x;//最后一次循环时,最高位不能为0,所以x=8
num[i][0]=(num[i-1][0]*x+num[i-1][1])%mod;//两位数的偶数个3的数的个数=1位数的奇数3的个数*1+1位数的奇数3的个数*9
num[i][1]=(num[i-1][1]*x+num[i-1][0])%mod;//两位数的奇数个3的数的个数=1位数的奇数3的个数*9+1位数的偶数3的个数*1
}
printf("%d\n", num[n][0]);
return 0;
} |
|