完美整数 | 豆包MarsCode AI刷题

63 阅读3分钟

问题描述

一个整数如果由相同的数字构成,则称为完美整数。例如:

111333 是完美整数。

1219101 是不完美整数。

现在,你需要计算给定区间 [x, y] 中有多少个整数是完美整数。

测试样例

样例1:

输入:x = 1 ,y = 10
输出:9

样例2:

输入:x = 2 ,y = 22
输出:10

def solution(x, y):
# 辅助函数:检查一个整数是否是完美整数
def is_perfect_number(num):
    # 将整数转换为字符串
    num_str = str(num)
    # 检查字符串中的所有字符是否相同
    return all(char == num_str[0] for char in num_str)

# 初始化计数器
count = 0

# 遍历区间 [x, y]
for num in range(x, y + 1):
    # 如果当前整数是完美整数,增加计数器
    if is_perfect_number(num):
        count += 1

# 返回完美整数的数量
return count


if __name__ == "__main__":
# 测试用例
print(solution(1, 10) == 9)
print(solution(2, 22) == 10)

代码解析

  1. 函数功能概述 这段Python代码定义了一个函数solution,其目的是计算给定区间[x, y]内“完美整数”的数量。“完美整数”在这里被定义为所有数位上的数字都相同的整数(例如11、222、5555等)。
  2. 代码详细解析 - def is_perfect_number(num): - 定义了一个内部辅助函数is_perfect_number,用于判断一个整数是否是“完美整数”。 - num_str = str(num):将输入的整数num转换为字符串,以便逐个检查数字字符。 - return all(char == num_str[0] for char in num_str):使用生成器表达式和all函数来检查字符串中的每个字符是否都与第一个字符相同。如果是,则返回True,表示该整数是“完美整数”;否则返回False。 - count = 0:在solution函数内部,初始化一个计数器count为0,用于统计“完美整数”的数量。 - for num in range(x, y + 1)::使用for循环遍历从xy(包括y)的所有整数。 - if is_perfect_number(num)::对于每个整数num,调用is_perfect_number函数来判断它是否是“完美整数”。 - count += 1:如果num是“完美整数”,则将计数器count加1。 - return count:循环结束后,返回计数器count的值,即区间[x, y]内“完美整数”的数量。 - 在if __name__ == "__main__":部分: - 这是Python中常用的模块入口检查部分。当脚本作为主程序运行时(而不是被导入为模块时),执行以下代码。 - print(solution(1, 10) == 9)print(solution(2, 22) == 10):调用solution函数并传入不同的区间参数,然后检查返回的结果是否与预期的数量相等,并打印比较结果(TrueFalse)。这部分代码用于对solution函数进行简单的测试。
  3. 示例执行流程 - 例如,当调用solution(1, 10)时: - 循环从1到10。对于1,is_perfect_number(1)返回True,因为"1"的所有字符都相同,count加1变为1。对于2到9同理,count依次增加到9。对于10,is_perfect_number(10)返回False,因为"10"的字符不同。最后返回count的值9,与预期结果比较并打印比较结果。 - 同样,当调用solution(2, 22)时,循环从2到22,会找到10个“完美整数”(2、3、4、5、6、7、8、9、11、22),count最终为10,与预期结果比较并打印比较结果。*