# 梦中的统计
## 题目背景
Bessie 处于半梦半醒的状态。过了一会儿,她意识到她在数数,不能入睡。
## 题目描述
Bessie 的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码($0 \ldots 9$):每一个数码在计数的过程中出现过多少次?
给出两个整数 $M$ 和 $N$,求在序列 $[M, M + 1, M + 2, \ldots, N - 1, N]$ 中每一个数码出现了多少次。
## 输入格式
第 $1$ 行: 两个用空格分开的整数 $M$ 和 $N$。
## 输出格式
第 $1$ 行: 十个用空格分开的整数,分别表示数码 $0 \ldots 9$ 在序列中出现的次数。
## 样例 #1
### 样例输入 #1
```
129 137
```
### 样例输出 #1
```
1 10 2 9 1 1 1 1 0 1
```
## 提示
数据保证,1≤M≤N≤2×109,N−M≤5×105。
第一次打算取数位,再0~9一一统计,但是有样例超时,这种在python中会超时,但是好像在
c++不会。
m,n=map(int,input().split())
c0,c1,c2,c3,c4,c5,c6,c7,c8,c9=0,0,0,0,0,0,0,0,0,0
for i in range(m,n+1):
while i>0:
k=i%10
if k==0:
c0+=1
i=i//10
continue
if k==1:
c1+=1
i=i//10
continue
if k==2:
c2+=1
i=i//10
continue
if k==3:
c3+=1
i=i//10
continue
if k==4:
c4+=1
i=i//10
continue
if k==5:
c5+=1
i=i//10
continue
if k==6:
c6+=1
i=i//10
continue
if k==7:
c7+=1
i=i//10
continue
if k==8:
c8+=1
i=i//10
continue
if k==9:
c9+=1
i=i//10
print(c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,end=" ")
后面把范围内的数字全部转换成字符串再拆开,放到列表中再用count方法统计0~9出现次数
m,n=map(int,input().split())
c0,c1,c2,c3,c4,c5,c6,c7,c8,c9=0,0,0,0,0,0,0,0,0,0
arr=list()
#m~n内范围的数
for i in range(m,n+1):
k=str(i)#字符串化
for j in k: #一个一个拆开
arr.append(j) #放到列表中
c0=arr.count('0')
c1=arr.count('1')
c2=arr.count('2')
c3=arr.count('3')
c4=arr.count('4')
c5=arr.count('5')
c6=arr.count('6')
c7=arr.count('7')
c8=arr.count('8')
c9=arr.count('9')
print(c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,end=" ")
题目背景
NOIP2013 普及组 T1
题目描述
试计算在区间 1 到 n 的所有整数中,数字 x(0≤x≤9)共出现了多少次?例如,在 1 到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。
输入格式
2 个整数 n,x,之间用一个空格隔开。
输出格式
1 个整数,表示 x 出现的次数。
输入输出样例
输入 #1复制
11 1
输出 #1复制
4
说明/提示
对于 100% 的数据,1≤n≤106,0≤x≤9。
相同的样例超时问题:
n,x=map(int,input().split())
count=0 #出现次数
a=list() #用来得到每个数拆开得到的各个数位 如:1234->[1,2,3,4]
#number-> list是不允许的
for i in range(1,n+1):
index=i
while index>0:
k=index%10 #得到末尾数字
index//=10
if k==x:
count+=1
print(count)
相同思路进行改进:
n,x=map(int,input().split())
arr=[]
for i in range(1,n+1):
k=str(i)
for j in k:
arr.append(j)
cx=str(x)
sum=arr.count(cx)
print(sum)