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
posted @ 2021-08-02 21:13  Rekord  阅读(208)  评论(0编辑  收藏  举报