【题目描述】

在所有的N 位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对12345 取余的值。

【输入】

读入一个数N(N≤1000)

【输出】

输出有多少个数中有偶数个数字3

【输入样例】

2

【输出样例】

73


题目解析:本题目对  for  循环内递推内容的理解是关键
(大家不妨自己找一下数学规律)

 

当n==1时,显然有9个(除了3,都是0个)

 

n==2时,也就是10--99之间,我们来数一下10--19有9个,20--29有9个,30--39有一个,剩下的区间都是9个

 

也就是9+9+1+9+9+9+9+9+9=8*9+1(1显然是 ”10-9 “ 得来的(不要嫌我啰嗦,后面会用到的  就让此时x==1吧))


那么当n==3时,100---199有多少呢(显然我们需要知道100个里面有n==1与n==2的总和,也就是73+9=82个)


那么应该就是82+82+x+82+82+82+82+82+82=8*82+x

(问题来了,x是多少呢?                 是 ”100-82“ 没毛病)

/*#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <cstring>
#include <stack>*/
#include <bits/stdc++.h>

#define A 1000+5

using namespace std;

const int maxn=1000+5;
int cnt;
int a[maxn];
int i,j;

int main()
{
    int n;
    cin>>n;

    if(n==1) cout<<9<<endl;

    int x=9;
    a[1]=9;
    long long de=10;
    for(i=2;i<=n;i++)
    {
        a[i]=(8*x+de-x)%12345;
        x=x+a[i];
        de=de*10%12345;//因为 n 最大为1000 所以赶紧求余吧,要不指数爆炸别怪我
    }
    cout<<a[n];
    return 0;
}

                                 

                                                                                                                             重要:         码字不易(点个赞)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐