当前位置: 首页 > article >正文

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 False
        else:  # 偶数位
            if digit % 2 != 0:  # 偶数位上的数字必须是偶数
                return False
    return True # 没有提前跳出函数,说明该数字符合要求

2,其次,我们应该实现对于符合要求的数字的计数功能,本部分应结合判断数字是否合规的函数:is_good_number  实现,本部分较为简单,请看代码:

def count_good_numbers(N):
    count = 0 # 初始计数器为0
    for num in range(1, N + 1): # 遍历范围内所有的数
        if is_good_number(num): # 符合“好数”条件
            count += 1
    return 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 False
        else:  # 偶数位
            if digit % 2 != 0:  # 偶数位上的数字必须是偶数
                return False
    return True # 没有提前跳出函数,说明该数字符合要求


def count_good_numbers(N):
    count = 0 # 初始计数器为0
    for num in range(1, N + 1): # 遍历范围内所有的数
        if is_good_number(num): # 符合“好数”条件
            count += 1
    return count


# 输入处理
if __name__ == "__main__":
    N = int(input().strip())
    print(count_good_numbers(N))

结果提交:

执行样例,通过:

将本部分代码提交蓝桥杯官网验证,得到结果如下:

那么对于本题,上述解法也是成功通过了(欢呼~)

在编写本题代码时,不知道同学们是否有其他更为巧妙的灵感buling闪现呢?欢迎在评论区交流或者私信博主哦~


http://www.kler.cn/a/520099.html

相关文章:

  • android的gradle
  • 单相可控整流电路——单相桥式全控整流电路
  • 理解C++中的右值引用
  • SYN Flooding的攻击原理
  • Golang Gin系列-8:单元测试与调试技术
  • 【Linux】Linux编译器-g++、gcc、动静态库
  • 谈谈对JavaScript 中的事件冒泡(Event Bubbling)和事件捕获(Event Capturing)的理解
  • 从63 秒到 0.482 秒:深入剖析 MySQL 分页查询优化
  • pipeline快速将数据存入redis
  • 【含代码】逆向获取 webpack chunk 下的__webpack_require__ 函数,获悉所有的模块以及模块下的函数
  • wordpress调用指定ID页面的链接
  • Maven下载与配置
  • SYN Flooding的攻击原理
  • 微服务网关鉴权之sa-token
  • 问题修复记录:Linux docker 部署 dify,无法调用宿主机本地服务
  • 计算机网络 (59)无线个人区域网WPAN
  • Stable Diffusion 3.5 介绍
  • 基于STM32单片机设计的宠物喂食监控系统
  • Linux系统编程:进程状态和进程优先级/nice
  • C++——动态管理
  • WinForm保持一个窗口在另一个全屏窗口的上面
  • Redis高阶5-布隆过滤器
  • MFC程序设计(四)窗口创建机制
  • 在php中怎么打开OpenSSL
  • 云服务器快速安装docker, mysql,redis教程
  • 闲来无事复习下基础算法——递归的魅力