1313 位数问题
真好,这道题用了我一个小时的时间把它切了
这还是一个递推题,cfc同学告诉我这是一道数论题,所以他是一个傻子
首先说一下,这道题的递推氏是真的很难推,首先设方程f[i][1]代表奇数个三的答案,f[i][0]代表偶数个三的答案
其实这道题的和组合数学有点小小的联系,需要自己用手算,不然真的会蒙
首先我们需要计算边界,也就是1的奇数偶数个方案f[1][0]=9,f[1][1]=1
然后需要明白一个道理,前一位有奇数个3,那么这一位就不能取3
前一位有偶数个3,那么这一位就得取3
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cmath>
#define mod 12345
using namespace std;
int f[1001][2];
int n,x;
int main()
{
cin>>n;
f[1][1]=1;//奇数
f[1][0]=9;//偶数
//边界情况
for(int i=2;i<=n;i++)
{
x=9;
if(i==n)
x--;
f[i][0]=(f[i-1][1]+f[i-1][0]*x)%mod;
f[i][1]=(f[i-1][0]+f[i-1][1]*x)%mod;
}
cout<<f[n][0]<<endl;
return 0;
}