[NOIP2010 普及组] 数字统计

题目描述

请统计某个给定范围 [L,R][L, R] 的所有整数中,数字 22 出现的次数。

比如给定范围 [2,22][2, 22],数字 22 在数 22 中出现了 11 次,在数 1212 中出现 11 次,在数 2020 中出现 11 次,在数 2121 中出现 11 次,在数 2222 中出现 22 次,所以数字 22 在该范围内一共出现了 66 次。

输入格式

22 个正整数 LLRR,之间用一个空格隔开。

输出格式

数字 22 出现的次数。

样例 #1

样例输入 #1

1
2 22

样例输出 #1

1
6

样例 #2

样例输入 #2

1
2 100

样例输出 #2

1
20

提示

1LR1000001 ≤ L ≤R≤ 100000

NOIP2010 普及组 第一题

题解

1
2
3
4
5
6
7
8
9
a, b = map(int, input().split())
count = 0
for i in range(a, b + 1):
i_str = str(i)
for j in i_str:
num_str = int(j)
if num_str == 2:
count += 1
print(count)

题解解释

这段代码实现了统计给定范围 [a,b][a, b] 中数字 22 出现的次数。首先通过 input().split() 获取用户输入的两个整数,然后通过 map(int, ...) 将输入的字符串转换为整数,并将其分别赋值给变量 ab。接着初始化计数变量 count00

然后通过 for i in range(a, b + 1): 循环遍历范围 [a,b][a, b] 中的每一个整数。在循环中,将当前整数 i 转换为字符串 i_str,然后通过 for j in i_str: 遍历该字符串的每一位数字。将每一位数字转换为整数 num_str,如果 num_str 等于 22,则将 count 自增 11

最后输出 count,即范围 [a,b][a, b] 中数字 22 出现的总次数。

知识点

提取整数中每一个数字

要提取一个整数中的每一位数字,你可以使用 Python 将其转换为字符串,然后逐个访问每个字符。下面是一个简单的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
def extract_digits(number):
# 将数字转换为字符串
number_str = str(number)

# 遍历字符串中的每个字符
for digit_char in number_str:
# 如果字符是数字字符,则转换为整数并打印
if digit_char.isdigit():
digit = int(digit_char)
print(digit)

# 调用函数并传入整数
extract_digits(123456)

这将输出:

1
2
3
4
5
6
1
2
3
4
5
6

这里我们将整数转换为字符串,然后遍历字符串的每个字符,将每个字符再转换回整数以获取每一位数字。

chr 和 str 函数,我搞混了

还要注意 chr 和 str 函数,我搞混了

在 Python 中,chr()str() 是两个不同的函数,用途也不同。

  1. chr(): 这个函数接受一个整数参数,并返回对应的 ASCII 或 Unicode 字符。例如,chr(65) 将返回字符’A’,chr(97) 将返回字符’a’。
1
2
print(chr(65))  # 输出: A
print(chr(97)) # 输出: a
  1. str(): 这个函数用于将对象转换为字符串。它可以接受任何类型的参数,并返回其字符串表示形式。对于数字,它会将数字转换为相应的字符串;对于其他对象,它会调用对象的 __str__() 方法来获取字符串表示形式。
1
2
3
print(str(65))  # 输出: '65'
print(str(3.14)) # 输出: '3.14'
print(str([1, 2, 3])) # 输出: '[1, 2, 3]'

所以,chr() 函数是将整数转换为字符,而 str() 函数是将任意对象转换为字符串。