1313:位数问题
【题目描述】在所有的N位数中,有多少个数中有偶数个数字3?由于结果可能很大,你只需要输出这个答案对12345取余的值。【输入】读入一个数N(N≤1000)。【输出】输出有多少个数中有偶数个数字3。【输入样例】2【输出样例】73题目解析:本题目对 for 循环内递推内容的理解是关键(大家不妨自己找一下数学规律)...
【题目描述】
在所有的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;
}
重要: 码字不易(点个赞)
更多推荐

所有评论(0)