首页 > 试题广场 >

水仙花数

[编程题]水仙花数
  • 热度指数:104680 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: “水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。 现在要求输出所有在m和n范围内的水仙花数。

输入描述:
输入数据有多组,每组占一行,包括两个整数m和n(100 ≤ m ≤ n ≤ 999)。


输出描述:
对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
如果给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。
示例1

输入

100 120
300 380

输出

no
370 371
s=list(map(int,input().split()))
m=s[0]
n=s[1]
res = []
for aaa in range(m,n+1):
    s = str(aaa)
    a = int(s[0])
    b = int(s[1])
    c = int(s[2])
    if a**3+b**3+c**3 == aaa:
        res.append(aaa)
if res==[]:
    print ('no')
else:
    print (res)
发表于 2020-08-27 09:24:36 回复(0)
while True:
    try:
        m,n=list(map(int,input().split(' ')))
        list1=[]
        list2=[]
        def flower(x):#判断是否是水仙花数
            str_list=list(x)
            if len(str_list)<3:
                return False
            sum1=int(str_list[0])**3+int(str_list[1])**3+int(str_list[2])**3
            if sum1==int(x):
                return True
            else:
                return False
        for i in range(m,n+1):
            #print(i)
            list1.append(str(i))
        for i in list1:
            if flower(i):
                list2.append(i)
        #print(list2)
        if len(list2)==0:
            print('no')
        else:
            result=' '.join(list2)
            print(result)
    except:
        break
发表于 2019-06-12 21:00:23 回复(0)
不通过
您的代码已保存
答案错误:您提交的程序没有通过所有的测试用例
case通过率为70.00%
测试用例:
60 387
对应输出应该为:
153 370 371
你的输出为:
wrong input, m,n should be 100<=m<=n<=999
呵呵哒
m,n = map(int, input().split())
# if 100<=m<=n<=999:
flowers = []
for i in range(m,n+1):
    if (i%10)**3 + (i//100)**3 + (i//10%10)**3 == i:
        flowers.append(i)
print("no" if not flowers else " ".join(map(str, flowers)))
'''
else:
    print('wrong input, m,n should be in 100<=m<=n<=999')
'''
发表于 2019-01-09 13:28:38 回复(0)
python解法:
import sys
for i in sys.stdin.readlines():
    begin, end = map(int, i.strip().split())
    narcissistic_number = []
    for j in range(begin, end + 1):
        # print(sum(list(map(lambda x: x * x, map(int, list(str(j)))))))
        if sum(list(map(lambda x: x * x * x, map(int, list(str(j)))))) == j:
            narcissistic_number.append(j)
    if narcissistic_number:
        print(" ".join(map(str, narcissistic_number)))
    else:
        print("no")

发表于 2019-01-02 15:28:06 回复(0)
# 开发人员: Mr Jiang
# 开发时间: 2018/12/5 10:12
# 文件名称:  daffodilNumber.PY
# 开发工具: PyCharm
# coding:utf-8
def searchDaffodil(x, y):
    daffodil = []
    for i in range(x, y + 1):
         a = i // 100
         b = (i - a * 100) // 10
         c = i - a * 100 - b * 10
         total = a ** 3 + b ** 3 + c ** 3
         if i == total:
             daffodil.append(str(i))
    if daffodil == []:
        print('no')
    else:
        print(' '.join(daffodil))
string = input().split(' ')
[m, n] = [int(i) for i in string]
searchDaffodil(m, n)
主要是输出问题,若采用print(i, end=' ')强行将水仙花数输出在一行内,是不能通过的,应该采用print(' '.join(daffodil))


发表于 2018-12-05 12:31:25 回复(0)
import sys
def func(m,n):     '''     m: int     n: int     '''     record = []     for i in range(m,n+1):         ge = i%10         shi = i//10%10         bai = i//100         if i == ge**3 + shi**3 + bai**3:             record.append(str(i))     if not record:         print('no')     else:         print(' '.join(record))
if __name__=='__main__':     m,n = map(int,sys.stdin.readline().strip().split())     func(m,n)

发表于 2018-09-22 14:12:02 回复(0)
import sys
def ifshuxian(s):
    List = list()
    beichushu = s
    sum = 0
    while beichushu is not 0:
        yushu = beichushu%10
        beichushu /= 10
        List.append(yushu)
    for item in List:
        sum += item*item*item
    if sum == s:
        return True
    else:
        return False

s = [item.rstrip('\n').split() for item in sys.stdin.readlines()]
for item in s:
    Lis = list()
    for dig in range(int(item[0]), 1+int(item[1])):
        if ifshuxian(dig) is True:
            Lis.append(str(dig))
    if len(Lis) is 0:
        print("no")
    else:
        print ' '.join(Lis)


发表于 2018-09-21 13:39:53 回复(0)
while (True):
    def shuixian():
        m,n = input().split()
        m = int(m)
        n = int(n)
        M = []
        k = 0
        if 100<= m <= n <= 999:
            for i in range(m, n+1):
                x = (i // 100)
                y = (i % 100)//10
                z = (i%10)
                if x**3 + y**3 + z**3 ==i:
                    M.append(i)
                    k += 1
                else:
                    pass
            if k == 0:
                print('no')
            else:
                s = " ".join(M)
                print(s)
        else:
            shuixian()
    shuixian()


编辑于 2018-09-17 10:04:13 回复(1)
import sys

for line in sys.stdin.readlines():
    m,n = map(int,line.strip().split())
    res = []
    for x in range(m,n+1):
        hun = x // 100
        dec = x % 100 // 10
        dig = x % 10
        y = pow(hun,3) + pow(dec,3) + pow(dig,3)
        if y == x:
            res.append(x)
    print('no' if not res else " ".join(map(str,res)))

编辑于 2018-09-11 09:46:15 回复(0)
python 大法好啊
if __name__ == '__main__':
    m, n = list(map(int, input().split(" ")))
    res = [] for i in range(m, n + 1):
        a = i % 10  b = i // 10 % 10  c = i // 100 % 10  if a ** 3 + b ** 3 + c ** 3 == i:
            res.append(i) if len(res) == 0: print("no") else: print(" ".join(map(str, res)))

发表于 2018-08-11 13:00:47 回复(0)
def func(n):
    a = int(n / 100)
    b = int((n - a*100) / 10)
    c = n - a*100 - b*10
    return a,b,c

raw_input = input()
input_num = raw_input.split()
min_num = int(input_num[0])
max_num = int(input_num[1])
res = []
for i in range(min_num, max_num+1):
    a,b,c = func(i)
    temp = a**3 + b**3 + c**3
    if temp == i:
        res.append(str(i))
if len(res) == 0:
    print('no')
else:
    res = ' '.join(res)
    print(res)

编辑于 2018-06-20 19:43:42 回复(0)

暴力算出结果,再索引,可以通过

```
import sys
ans = [0 for i in range(1000)] 
for i in range(100,1000):
    a,b,c = map(int,str(i)) 
    if i ==(a**3 + b**3 + c**3):
        ans[i]=1 
for mn in sys.stdin.readlines():
    m,n = map(int,mn.split())
    temp = [] 
    for i in range(m,n+1): 
        if ans[i]==1:
            temp.append(i) 
    if temp.__len__()==0: 
        print('no') 
    else: 
        print(' '.join(map(str,temp)))

```

发表于 2018-05-22 14:50:06 回复(0)

m,n=input().split() n=int(n) m=int(m) M=[] for i in range(m,n):     a=i//100     b=i%100     c=b//10     d=b%10     if i==a**3+c**3+d**3:         M.append(i) if M==[]:     print('no') else:     for i in M[:-1]:         print(i,end=' ')     print(M[-1])

 


编辑于 2018-04-25 19:08:42 回复(3)
import sys
for i in sys.stdin.readlines():
    m,n= map(int, i.strip().split())
    
    ans=[]
    for i in range(m,n+1):
        j=str(i)
        lifanghe=sum([int(jj)**3 for jj in j])
        if lifanghe==i:
            ans.append(str(i))
            continue
        else:
            continue
    if ans==[]:
        print('no')
    else:
        print(' '.join(ans))

发表于 2018-04-25 12:59:48 回复(0)
while True:
    try:
        m,n=map(int,input().split(' '))
        sxh=[]
        for i in range(m,n+1,1):
            if (i==int(i/100)**3+int(i%100/10)**3+int(i%10)**3):
                sxh.append(i)
        if sxh==[]:
            print('no')
        else:
            for j in range(len(sxh)):
                if j<len(sxh)-1:
                    if sxh[j]>sxh[j+1]:
                        empty=sxh[j]
                        sxh[j]=sxh[j+1]
                        sxh[j+1]=empty
            for m in range(len(sxh)):
                if m<len(sxh)-1:
                    print(sxh[m],end=' ')
                else:
                    print(sxh[m])
    except:
        break
发表于 2018-04-17 17:01:06 回复(0)
# 实际在100-999 只有四个水仙花数
m,n = map(int,input().split())
a = [153, 370, 371, 407]
res = []
for b in a:
    if b in range(m,n):
        res.append(b)
        
if len(res)==0:
    print("no")
else:
    print(" ".join(str(a) for a in res))

发表于 2018-03-26 17:26:38 回复(0)
第一次做这个牛客的题目,为啥我本机运行通过,但是代码贴进去,就不能通过了?
代码如下



编辑于 2018-02-26 14:04:56 回复(0)
starttarget,endtarget = map(int,input().split(' '))                
digits = []
finalresult = 0
i = 0
nothing = 0
outprint = []
for counter in range(starttarget,endtarget):
    elements = counter
    while(elements>0) :
        holders = elements%10
        digits.append(holders)
        elements = elements // 10
    length=len(digits)
    while(i<length):
        temp = (digits[i])**3
        finalresult = finalresult + temp
        i+=1
    if(finalresult == counter):
        outprint.append(counter)
        nothing = 1
    digits.clear()
    i=0
    holders=0
    finalresult = 0

if(nothing == 0):
    print('no')
else:
    while(i<len(outprint)-1):
        print(outprint[i],end=' ')
        i+=1
    print(outprint[i])

编辑于 2018-01-24 23:04:43 回复(1)
m,n=map(int,input('').split(' '))
a_list=[]
s=0
for i in range(m,n+1):
    i=str(i)
    for j in range(len(i)):
        s+=int(i[j])**3
    if s==int(i):
        a_list.append(i)
    s=0
if a_list:
    print(' '.join(a_list))
else:
    print('no')
发现mn根本不在100-999之间,这是Python的通用解法~
发表于 2017-12-07 21:46:49 回复(0)