通过率 77% · 提交 261 · 通过 202
小慕正在编写一个程序,需要从中读入一个三位数n,然后输出100到n之间(包含n)的所有。 假设有一个三位数n = abc,其中a、b、c分别是n的百位、十位和个位。 n是一个水仙花数,当且仅当n = a3 + b3 + c3。 例如,153是一个水仙花数,因为153 = 13 + 53 + 33 = 1 + 125 + 27。
这类题属于算法机考高频题型中「基础语法 / 循环语句」方向的高频题型,通常考察对「基础语法 / 循环语句」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
输入一个数字,表示n(n <= 999)
若干行数字
示例 1
输入示例
999
输出示例
153 370 371 407
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
这些是真正决定能不能 AC、但通用题解里常被略过的点。
题意一句话:读入一个三位数 n,输出 100 到 n(含 n)之间所有「水仙花数」——即等于自身各位数字立方和的数(如 153 = 1³ + 5³ + 3³)。
候选范围最多只有 100~999 这 900 个数,直接逐个枚举、对每个数拆出百位/十位/个位、验证「立方和是否等于自身」即可——范围小,暴力枚举就是标准解法。
1. 读入整数 n; 2. 循环 i 从 100 到 n(range(100, n + 1),注意包含 n); 3. 拆位:百位 a = i // 100,十位 b = (i // 10) % 10,个位 c = i % 10; 4. 判断 a**3 + b**3 + c**3 == i,成立则输出 i(每个一行)。
range 右端点要写 n + 1;// 100、十位 // 10 % 10、个位 % 10,十位漏掉 % 10 是常见笔误。n = int(input())
for i in range(100, n + 1):
a = i // 100
b = (i // 10) % 10
c = i % 10
if a**3 + b**3 + c**3 == i:
print(i)登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有