题目描述 如果一个三位数n � 的各位数字的立方和等于n � ,那么称n � 为水仙花数。例如153=13+53+33 153 = 1 3 + 5 3 + 3 3 ,因此153是水仙花数。 给定两个正整数a � 、b � ,输出在闭区间[a,b] [ � , � ] 内的所有水仙花数。 输入描述 两个正整数a � 、b � (100≤a≤b≤999 100 ≤ � ≤ � ≤ 999 )。 输出描述 在一行里输出闭区间[a,b] [ � , � ] 内的所有水仙花数,多个水仙花数按从小到大的顺序输出,中间用空格隔开,行末不允许有多余的空格。如果区间内没有水仙花数,那么输出NO
时间: 2024-01-20 18:03:58 浏览: 104
以下是 Python 3 实现:
```python
a, b = map(int, input().split())
result = []
for i in range(a, b+1):
s = str(i)
if i == sum([int(c)**3 for c in s]):
result.append(str(i))
if result:
print(' '.join(result))
else:
print('NO')
```
思路:
从 a 遍历到 b,对于每个数,先将它转换成字符串,然后计算每个字符的立方和。如果和等于该数本身,就说明这是一个水仙花数,将它加入结果列表中。最后判断结果列表是否为空,如果不为空,则将每个水仙花数连接成字符串输出;否则输出 NO。
相关问题
c语言解决题目描述 如果一个三位数n � 的各位数字的立方和等于n � ,那么称n � 为水仙花数。例如153=13+53+33 153 = 1 3 + 5 3 + 3 3 ,因此153是水仙花数。 给定两个正整数a � 、b � ,输出在闭区间[a,b] [ � , � ] 内的所有水仙花数。 输入描述 两个正整数a � 、b � (100≤a≤b≤999 100 ≤ � ≤ � ≤ 999 )。 输出描述 在一行里输出闭区间[a,b] [ � , � ] 内的所有水仙花数,多个水仙花数按从小到大的顺序输出,中间用空格隔开,行末不允许有多余的空格。如果区间内没有水仙花数,那么输出NO
以下是 C 语言的解法:
```c
#include <stdio.h>
int main() {
int a, b;
scanf("%d %d", &a, &b);
int i, j, k;
int count = 0; // 记录水仙花数的个数
for (i = a; i <= b; i++) {
j = i / 100; // 百位
k = i % 10; // 个位
if (j * j * j + (i / 10 % 10) * (i / 10 % 10) * (i / 10 % 10) + k * k * k == i) {
// 如果各位数字的立方和等于这个数本身,那么这个数是水仙花数
count++;
if (count == 1) {
printf("%d", i);
} else {
printf(" %d", i);
}
}
}
if (count == 0) {
printf("NO");
}
return 0;
}
```
首先读入两个正整数 a 和 b,然后使用 for 循环遍历闭区间 [a,b] 中的每一个数。对于每一个数,将它的百位、十位和个位分别计算出来,然后判断各位数字的立方和是否等于这个数本身。如果相等,则输出这个数;否则继续遍历下一个数。
需要注意的是,如果闭区间 [a,b] 内没有水仙花数,那么需要输出 NO。
用C语言完成 题目描述 如果一个三位数n � 的各位数字的立方和等于n � ,那么称n � 为水仙花数。例如153=13+53+33 153 = 1 3 + 5 3 + 3 3 ,因此153是水仙花数。 给定两个正整数a � 、b � ,输出在闭区间[a,b] [ � , � ] 内的所有水仙花数。 输入描述 两个正整数a � 、b � (100≤a≤b≤999 100 ≤ � ≤ � ≤ 999 )。 输出描述 在一行里输出闭区间[a,b] [ � , � ] 内的所有水仙花数,多个水仙花数按从小到大的顺序输出,中间用空格隔开,行末不允许有多余的空格。如果区间内没有水仙花数,那么输出NO。 样例输入1 360 380 样例输出1 370 371 样例输入2 350 360 样例输出2 NO
```c
#include <stdio.h>
int main() {
int a, b;
scanf("%d%d", &a, &b);
int i;
int flag = 0;
for (i = a; i <= b; i++) {
int num = i;
int sum = 0;
while (num) {
int digit = num % 10;
sum += digit * digit * digit;
num /= 10;
}
if (sum == i) {
printf("%d ", i);
flag = 1;
}
}
if (!flag) {
printf("NO");
}
return 0;
}
```
阅读全文