#include<bits/stdc++.h>
using namespace std;
long long c[55];
long long l[55];
int main()
{
c[0]=1;//第1个月有1对成虫
l[0]=0;//第1个月有0对卵
int x,y,z;
cin>>x>>y>>z;
for(int i=1;i<=z;i++)
{
if(i-x>=0)//防止数组越界
{
l[i]=c[i-x]*y;//第i个月的卵数=成虫每过x个月的产卵数
}
c[i]=c[i-1];//无论是否有新的成虫产生,成虫数量都先等于它上个月的成虫数量
if(i>=2)//如果月数>2
{
c[i]+=l[i-2];//加上两个月前卵的数量,即新的成虫
}
}
cout<<c[z];
}
位数问题
#include<bits/stdc++.h>
using namespace std;
long long arr[1005][2];
int main()
{
int n;
cin>>n;
arr[1][0]=1;arr[1][1]=8;//0代表奇数3个数,1代表偶数3个数 注意个数为0也算偶数
for(int i=2;i<=n;i++)
{
arr[i][0]=(arr[i-1][0]*9+arr[i-1][1])%12345;//奇数3个数=上一位奇数个数*9+上一位偶数个数
arr[i][1]=(arr[i-1][0]+arr[i-1][1]*9)%12345; //偶数3个数=上一位奇数个数+上一位偶数个数*9
}
cout<<arr[n][1];
}