第16届蓝桥杯备赛训练题目六-第一题-好数19709

题目描述

一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位⋯ ) 上的数字是奇数,偶数位 (十位、千位、十万位 ⋯ ) 上的数字是偶数,我们就称之为 “好数”。 给定一个正整数 N,请计算从 1 到 N 一共有多少个好数。 输入格式 一个整数N。 输出格式 一个整数代表答案。

代码

# 定义一个函数 is_good,用于判断一个数是否为“好数”
def is_good_number(a):
    # 当 a 大于 0 时,逐位检查数字
    while a > 0:
        # 检查当前个位数字(最右边的数字)
        if a % 2 != 0:
            # 如果个位数字是奇数,将 a 除以 10 以去掉个位数字,继续检查下一位
            a = a // 10
        else:
            # 如果个位数字是偶数,不符合“好数”的定义,直接跳出循环
            break
        # 检查当前十位数字(新的最右边的数字,因为之前已经去掉了个位数字)
        if a % 2 == 0:
            # 如果十位数字是偶数,将 a 除以 10 以去掉十位数字,继续检查下一位
            a = a // 10
        else:
            # 如果十位数字是奇数,不符合“好数”的定义,直接跳出循环
            break
    # 循环结束后,如果 a 变为 0,说明整个数字都符合“好数”的定义
    if a == 0:
        return True
    else:
        # 如果 a 不为 0,说明在检查过程中遇到了不符合“好数”定义的数字
        return False

# 从用户输入中获取一个整数 n
n = int(input())
# 初始化计数器 cnt,用于统计从 1 到 n 中“好数”的数量
cnt = 0
# 遍历从 1 到 n 的所有整数
for i in range(1, n + 1):
    # 调用 is_good 函数判断当前整数 i 是否为“好数”
    if is_good(i):
        # 如果是“好数”,计数器 cnt 加 1
        cnt += 1
# 打印从 1 到 n 中“好数”的数量
print(cnt)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值