P1554 梦中的统计 && P1980 [NOIP2013 普及组] 计数问题

# 梦中的统计

## 题目背景

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)

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值