查数

来源:互联网 发布:英伦历史类影视知乎 编辑:程序博客网 时间:2024/04/30 08:29

99. 查数

★   输入文件:chashu.in   输出文件:chashu.out   简单对比
时间限制:1 s   内存限制:128 MB
【问题描述】
    在所有的N位数中,有多少个数中有偶数个数字3?
 
【输入格式】 
     文件只有一行为一个正整数n
 
【输出格式】 
     输出文件只有一个整数,方案数(由于结果可能很大,你只需要输出这个答案mod 12345的值。)。
 
【输入输出样例】
 
输入: 
chashu.in
2
输出:
chashu.out
73
 
数据规模:1<=N<=1000

简单 递推。。对于这类题可以先写个暴力程序,看能否找出规律,顺便能得出部分数据。。

#include<cstdio>#include<cmath>using namespace std;int dp[1024][2];  //0记录奇数个3的个数,1记录偶数个3的个数int main(){    freopen("chashu.in","r",stdin);    freopen("chashu.out","w",stdout);    int n;    dp[1][0]=1;    dp[1][1]=8;    dp[2][0]=17;     dp[2][1]=73;    for(int i=3;i<=1000;i++){        dp[i][1]=(dp[i-1][1]*9+dp[i-1][0])%12345;        dp[i][0]=(dp[i-1][1]+dp[i-1][0]*9)%12345;    }    scanf("%d",&n);    printf("%d\n",dp[n][1]);    return 0;}//int is(int n){//    int cnt=0;////    while(n>0){//        int ret = n%10;//        if(ret==3) cnt++;//        n/=10;//    }//    if(cnt%2==0) return 1;//    return 0;////}//int main(){//    int n;//   // scanf("%d",&n);//    int ans;//    for(int i=1;i<=7;i++){//        int last=ans;//        ans=0;//        for(int j=pow(10,i-1);j<pow(10,i);j++){//            ans+=is(j);//        }//        printf("%d %d \n",ans-last*9,ans);//    }//    return 0;////}