问题描述
一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位…)上的数字是奇数,偶数位(十位、千位、十万位…)上的数字是偶数,我们就称之为“好数”。
给定一个正整数N,请计算从1到N一共有多少个好数。
输入格式
一个整数N。
输出格式
一个整数代表答案。
样例输入 1
24
样例输出 1
7
样例输入2
2024
样例输出 2
150
样例说明
对于第一个样例,24以内的好数有1、3、5、7、9、21、23,一共7个。
问题解析:
本体较为简单,属于入门级别的编程题,主要考察对应python中字符串处理相关函数的使用,如果你对于字符串处理这一块还是不怎么熟悉的话,皇上,哔哩哔哩大学传送门已经给您备好辣~
皇上您想要顺利的解决本题,需要掌握的python知识点如下:1,【Python字符串常用操作都在这里了】
2,【Python for循环详解】在本视频中,请着重关注【567】enumerate 这个关键字的使用方法哦
当你足够了解字符串处理相关,或者已经从哔哩哔哩大学进修归来,再读本题,相信当你读完这个题目时,应该在脑海中能够形成比较系统的解题思路了
没错!没错没错!
本题将借助 enumerate 来实现同时取出字符串中的字符及其下标,并借此实现判断奇数位和偶数位对应的数字是否符合题设要求:
奇数位(个位、百位、万位…)上的数字是奇数,偶数位(十位、千位、十万位…)上的数字是偶数
因此本题的解题思路即为:
1,设计函数,借助 for 循环 和 enumerate 来判断每一个位上的数字是否符合要求
2,设计函数,将所有范围内的满足要求的数字纳入计数
万事俱备,接下来我们开始编写相应的代码
代码描述:
1,首先,我们来实现检查每一位上的数字是否符合要求,这也是本题需要我们实现的核心部分:
def is_good_number(num):# 将数字转换为字符串,便于逐位处理num_str = str(num)length = len(num_str)for i, digit in enumerate(num_str): # 使用enumerate提取每一位数字及其对应的下标digit = int(digit)# 奇数位检查(从右到左,1到based):位索引 i 从 0 开始,因此 (length - i) 是 1到based 的位数if (length - i) % 2 == 1: # 奇数位if digit % 2 == 0: # 奇数位上的数字必须是奇数return Falseelse: # 偶数位if digit % 2 != 0: # 偶数位上的数字必须是偶数return Falsereturn True # 没有提前跳出函数,说明该数字符合要求
2,其次,我们应该实现对于符合要求的数字的计数功能,本部分应结合判断数字是否合规的函数:is_good_number 实现,本部分较为简单,请看代码:
def count_good_numbers(N):count = 0 # 初始计数器为0for num in range(1, N + 1): # 遍历范围内所有的数if is_good_number(num): # 符合“好数”条件count += 1return count
3,最后,我们将上述代码进行综合:
def is_good_number(num):# 将数字转换为字符串,便于逐位处理num_str = str(num)length = len(num_str)for i, digit in enumerate(num_str): # 使用enumerate提取每一位数字及其对应的下标digit = int(digit)# 奇数位检查(从右到左,1到based):位索引 i 从 0 开始,因此 (length - i) 是 1到based 的位数if (length - i) % 2 == 1: # 奇数位if digit % 2 == 0: # 奇数位上的数字必须是奇数return Falseelse: # 偶数位if digit % 2 != 0: # 偶数位上的数字必须是偶数return Falsereturn True # 没有提前跳出函数,说明该数字符合要求def count_good_numbers(N):count = 0 # 初始计数器为0for num in range(1, N + 1): # 遍历范围内所有的数if is_good_number(num): # 符合“好数”条件count += 1return count# 输入处理
if __name__ == "__main__":N = int(input().strip())print(count_good_numbers(N))
结果提交:
执行样例,通过:
将本部分代码提交蓝桥杯官网验证,得到结果如下:
那么对于本题,上述解法也是成功通过了(欢呼~)
在编写本题代码时,不知道同学们是否有其他更为巧妙的灵感buling闪现呢?欢迎在评论区交流或者私信博主哦~