📅  最后修改于: 2023-12-03 15:42:21.900000             🧑  作者: Mango
这道编程题是门|门 IT 2007比赛中的第53题。本题难度适中,适合初学者和进阶者练习。本题需要编写一个程序,实现输入一个整数n,输出从1到n的所有正整数中,数字7出现的次数。
给定一个正整数n(1<=n<=10000),请编写程序计算从1到n的所有正整数中,数字7出现的次数。
一个正整数n。
数字7出现的次数。
30
4
该题的难点在于如何统计从1到n的所有正整数中数字7出现的次数。一种简单的方法是将从1到n的每个数字转换为字符串,然后逐一遍历每个字符串中的字符,计算数字7出现的次数。代码如下:
def count_seven(n):
cnt = 0
for i in range(1, n+1):
for c in str(i):
if c == '7':
cnt += 1
return cnt
另一种方法是将n拆分为若干位,逐一统计每一位上数字7出现的次数,最后汇总计算。代码如下:
def count_seven(n):
cnt = 0
m = n
base = 1
while m > 0:
d = m % 10
m //= 10
cnt += m * base
if d > 7:
cnt += base
elif d == 7:
cnt += n % base + 1
base *= 10
return cnt
以下是该题的Markdown代码:
# 门|门 IT 2007 | 第 53 题
这道编程题是门|门 IT 2007比赛中的第53题。本题难度适中,适合初学者和进阶者练习。本题需要编写一个程序,实现输入一个整数n,输出从1到n的所有正整数中,数字7出现的次数。
## 题目描述
给定一个正整数n(1<=n<=10000),请编写程序计算从1到n的所有正整数中,数字7出现的次数。
## 输入格式
一个正整数n。
## 输出格式
数字7出现的次数。
## 样例输入
30
## 样例输出
4
## 解题思路
该题的难点在于如何统计从1到n的所有正整数中数字7出现的次数。一种简单的方法是将从1到n的每个数字转换为字符串,然后逐一遍历每个字符串中的字符,计算数字7出现的次数。代码如下:
```python
def count_seven(n):
cnt = 0
for i in range(1, n+1):
for c in str(i):
if c == '7':
cnt += 1
return cnt
另一种方法是将n拆分为若干位,逐一统计每一位上数字7出现的次数,最后汇总计算。代码如下:
def count_seven(n):
cnt = 0
m = n
base = 1
while m > 0:
d = m % 10
m //= 10
cnt += m * base
if d > 7:
cnt += base
elif d == 7:
cnt += n % base + 1
base *= 10
return cnt