首页 > 试题广场 >

[NOIP2013]记数问题

[编程题][NOIP2013]记数问题
  • 热度指数:12696 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
试计算在区间1 n 的所有整数中,数字x0 ≤ x ≤ 9)共出现了多少次?
例如,在111 中,即在1234567891011 中,数字1 出现了4 次。

输入描述:
输入共1行,包含2个整数n、x,之间用一个空格隔开。


输出描述:
输出共1行,包含一个整数,表示x出现的次数。
示例1

输入

11 1

输出

4

备注:
对于100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 9。
n,x = map(int,(input().split()))
s = 0
for i in range(1,n+1):
    t = str(i)
    s += t.count(str(x))
print(s)

发表于 2022-07-25 13:05:21 回复(0)
n, x = map(int, input().split())
num_list = [i for i in range(1, n+1)]
res = 0

def countNum(num, x):
    count = 0
    while num > 0:
        if num%10 == x:
            count += 1
        num = num // 10
    return count

for item in num_list:
    result = countNum(item, x)
    res += result
print(res)

发表于 2022-07-08 12:14:34 回复(0)
n, x = input().split()
c = 0
for i in range(1, int(n)+1):
    c += str(i).count(x)
print(c)

发表于 2022-03-27 18:08:20 回复(0)
凭我朴素的直觉,写了一个非常低效的答案,当反面例子看吧:
n,x = map(int,input().split())
t = 0
for i in range(1,n+1):
    for j in range(len(str(i))):
        if str(x) in str(i)[j]:
# 如果x在i的第j个字符出现,那t计数一次
            t += 1
        else:
            t = t
print (t)


#  会报错
# 运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。

参考了讨论区“我有一只猫”大佬的方法:
m,n=map(int,input().split())
cc=''
for i in range(1,m+1):
    i=str(i)
    cc+=i
    # 意思是把所有数字的文本先加在一起,组成一个名为cc的长文本,
con=cc.count(str(n))
# 再在cc之中用count,数n这个数字出现的次数
# 妙哇!
print(con)


发表于 2022-03-04 19:51:20 回复(0)
m,n=map(int,input().split())
cc=''
for i in range(1,m+1):
    i=str(i)
    cc+=i
con=cc.count(str(n))
print(con)
发表于 2022-03-01 17:56:58 回复(0)
while True:
    try:
        n,x = map(int, input().split())
        count = 0
        for i in list(range(1, n+1, 1)):
            count = count + str(i).count(str(x))
        print(count)
    except:
        break
发表于 2022-02-26 18:36:30 回复(0)