欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 16.好数python解法——2024年省赛蓝桥杯真题

16.好数python解法——2024年省赛蓝桥杯真题

2025/9/25 7:55:32 来源:https://blog.csdn.net/qq3342560494/article/details/145359123  浏览:    关键词:16.好数python解法——2024年省赛蓝桥杯真题

问题描述
一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位…)上的数字是奇数,偶数位(十位、千位、十万位…)上的数字是偶数,我们就称之为“好数”。
给定一个正整数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闪现呢?欢迎在评论区交流或者私信博主哦~

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词