1313:【例3.5】位数问题
递推写着写着,然后,动态规划的味道越来越浓了!
1 #include<iostream> 2 using namespace std; 3 const int N=1005; 4 int main(){ 5 int n,f[N][2]; 6 cin>>n; 7 f[1][0]=9,f[1][1]=1; 8 //从低位开始往高位推 9 int x=9; 10 for(int i=2;i<=n;i++){ 11 //最高位不能取0,故减一 12 if(i==n)x--; 13 f[i][0]=(f[i-1][0]*x+f[i-1][1]*1)%12345; 14 //奇数个3的情况 15 f[i][1]=(f[i-1][0]*1+f[i-1][1]*x)%12345; 16 } 17 cout<<f[n][0]; 18 return 0; 19 }
额外收获:
- while(cin>>x){}接收输入
- exit(0)来源于'cstdlib'
- 取余运算满足结合律--》((a*b)%d*c)%d=(a*b*c)%d
- 'cstring'中的compare函数,调用方字典序大则返回1,字典序小则返回-1,相同返回0