鱼C论坛

 找回密码
 立即注册
楼主: 冬雪雪冬

[技术交流] Python:每日一题 158

[复制链接]
发表于 2018-2-28 18:12:41 | 显示全部楼层
新手新手,多多指教!
import math

h = 1
d = 0
u = 0

while h<10 :
        hun = math.factorial(h)
       
        while d<10 :
                dec = math.factorial(d)
               
                while u<10 :
                        unit = math.factorial(u)
                        if (h*100 + d*10 + u) == (hun + dec + unit) :
                                print(hun + dec + unit)
                        u += 1
                       
                d += 1
                u = 0
               
        h += 1
        d = u = 0

# 得145

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 不错,用for循环更方便些

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 18:54:48 | 显示全部楼层
  1. from functools import reduce
  2. f = lambda i: reduce(lambda x,y: x*y, range(1, i+1)) if i !=0 else 1
  3. for i in range(100,1000):
  4.     if f(i//100)+f(i%100//10)+f(i%10)==i:
  5.         print(i)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 19:38:37 | 显示全部楼层
for i in range(100,1000):
    a=i//100
    b=i%100//10
    c=i%100%10
    if i==a**3+b**3+c**3:
        print(i)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 20:01:23 | 显示全部楼层
是阶乘和还是他们三个的阶乘
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 20:05:24 From FishC Mobile | 显示全部楼层
m = range(1,10)
q = w = e = 1
for x in m:
for y in m:
  for z in m:
   for a in range(1,x+1):
    q *= a
   for b in range(1,y+1):
    w *= b
   for c in range(1,z+1):
    e *= c
   if q+w+e == x*100+y*10+z:
    print(q+w+e)
   q = w = e = 1

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 20:07:37 | 显示全部楼层
  1. def jiecheng(n):
  2.     a = 1
  3.     if (n == 0) or (n == 1):
  4.         number = a
  5.     else :
  6.         for i in range(1,n + 1):
  7.             a = a * i
  8.         number = a        
  9.     return answer

  10. answer = []

  11. for i in (100,1000):
  12.     bai = int(i / 100)
  13.     shi = int((i - bai * 100) / 10)
  14.     ge = int(i - bai * 100 - shi * 10)
  15.     if i == jiecheng(bai) + jiecheng(shi) + jiecheng(ge):
  16.         answer.append(i)

  17. print(answer)
  18.    
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 20:19:50 | 显示全部楼层
#Narcissistic Numbers

def narNums():#计算水仙花数
    n = 100
    while n<1000:
        num_str = str(n)
        if pow(int(num_str[0]),3)+pow(int(num_str[1]),3)+pow(int(num_str[2]),3) == n:
            print(n)
        n += 1
    return

def factorial(n):#计算阶乘函数
    if n == 0:
        return 1
    elif n == 1:
        return 1
    else:
        return n*factorial(n-1)

def fac_narNums():#计算阶乘水仙花数
    n = 100
    while n<1000:
        num_str = str(n)
        if factorial(int(num_str[0]))+factorial(int(num_str[1]))+factorial(int(num_str[2])) == n:
            print(n)
        n += 1
    return

def main():
    print("水仙花数:")
    narNums()
    print("阶乘水仙花数:")
    fac_narNums()
    return

if __name__ == "__main__":
    main()

水仙花数:
153
370
371
407
阶乘水仙花数:
145
>>>

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 20:33:33 | 显示全部楼层
def factorialnumber():

    def factorial(n):
        result=n
        for i in range(1,n):
            result*=i
        if n==0:
            return 1
        return result
   
         
    for i in range(100,1000):
        tempvalue=i
        sumtemp=0
        for each in range(0,3):
            temp=tempvalue%10         
            sumtemp=sumtemp+factorial(temp)
            tempvalue=tempvalue//10

        if i==sumtemp:
            print("the number is: %d"%i)

factorialnumber()

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 21:19:53 | 显示全部楼层
  1. def factorial(x):
  2.     result = 1
  3.     for i in range(2, x + 1):
  4.         result *= i
  5.     return result


  6. for i in range(100, 1000):
  7.     a = int(i / 100)
  8.     b = int(i / 10) % 10
  9.     c = i % 10
  10.     if (i == factorial(a) + factorial(b) + factorial(c)):
  11.         print(i)
复制代码



所得为145

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 21:53:12 | 显示全部楼层
#m_158.py
#fengyutianshang
def factorial(num):
    "计算num的阶乘"
    fac = 1
    if num < 0:
        return 0
    elif num == 0:
        return 1
    else:
        for i in range(1, num + 1):
            fac = fac * i
    return fac

for a in range(1,10):
    for b in range(0, 10):
        for c in range(0, 10):
            temp = factorial(a) + factorial(b) +factorial(c)
            if temp == 100*a +10*b + c:
                fin = temp
                break
print("%d 为所求的三位数!"% fin)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 23:05:24 | 显示全部楼层
from math import *
for i in range(100,1000):
    a = i // 100
    b = i // 10 % 10
    c = i % 10
    if factorial(a) + factorial(b) + factorial(c) == i:
        print(i)

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-2-28 23:17:39 | 显示全部楼层
  1. def jc(a):
  2.     if a == 0:
  3.         return 0
  4.     else:
  5.         j = 1
  6.         for i in range(1,a+1):
  7.             j  *= i
  8.         return j

  9. def flower(num):
  10.     a, b, c = list(str(num))
  11.     if jc(int(a)) + jc(int(b)) + jc(int(c)) == num:
  12.         return True
  13.     else:return False

  14. if __name__ == '__main__':
  15.     flowers = list()
  16.     for i in range(100, 1000):
  17.         if flower(i):
  18.             flowers.append(i)
  19.     print(flowers, len(flowers))
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 01:16:37 | 显示全部楼层
剛學習編程的新手 每日練習奠定穩固的編程基礎!

  1. def factorial(number):
  2.     if number == 1 or number == 0:
  3.         return 1
  4.     return number*factorial(number-1)

  5. answer = [factorial(i)+factorial(j)+factorial(k) for i in range(1, 10) for j in range(0, 10) for k in range(0, 10)\
  6.           if i*100+j*10+k == factorial(i)+factorial(j)+factorial(k)]
  7. print(answer)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 09:02:47 | 显示全部楼层
  1. import math


  2. def function(num):
  3.     factorial_sum = 0
  4.     for each in str(num):
  5.         factorial_sum += math.factorial(int(each))

  6.     return factorial_sum == num


  7. for num in range(100, 1000):
  8.     if function(num):
  9.         print(num, end=' ')

  10. print()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 09:14:32 | 显示全部楼层
  1. def calc(x):
  2.     result=1
  3.     x=int(x)
  4.     for i in range(1,x+1):
  5.         result*=i
  6.         i+=1
  7.     return result
  8.         
  9. def main():
  10.     for i in range(100,1000):
  11.         temp=str(i)
  12.         result=calc(temp[0])+calc(temp[1])+calc(temp[2])
  13.         if result==i:
  14.             print(i)
  15.    
  16. if __name__=='__main__':
  17.     main()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 09:37:06 | 显示全部楼层
  1. from itertools import accumulate
  2. from operator import mul

  3. def fun158():

  4.     def factorial(num):
  5.         if num == 0:
  6.             return 1
  7.         return max([i for i in accumulate([j for j in range(1,num+1)],mul)])

  8.     for i in range(100,1000):
  9.         if sum([factorial(int(j)) for j in str(i)]) == i:
  10.             return i

  11. if __name__ == '__main__':
  12.     print(fun158())
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 10:18:34 | 显示全部楼层
for i in range(100,999,1):
    a=str(i)#把三位数变成字符串
    sum=0
    for each in a:
        b=int(each)#把三位数的各位数字列出来并依次赋值给b
        c=1
        while b>0: #使用循环求数字b的阶乘c
            c=c*b
            b-=1
        sum+=c#求各位数字阶乘c的和
    if i==sum:
        print(i)
   

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 10:51:07 | 显示全部楼层
为啥看不到别人的答案啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 10:56:24 | 显示全部楼层
本帖最后由 JessiFly 于 2018-3-1 10:57 编辑
  1. def fact(num):
  2.     if num == 0 or num == 1:
  3.         return 1
  4.     else:
  5.         return num * fact(num-1)

  6. for i in range(100,1000):
  7.     sum = 0
  8.     temp = i
  9.     while temp:
  10.         sum += fact(temp%10)
  11.         temp //= 10
  12.     if sum == i:
  13.         print(i)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 10:56:30 | 显示全部楼层
本帖最后由 lyjlyj 于 2018-3-1 10:57 编辑
  1. #coding=utf-8
  2. '''求三位数中,其值等于各位数的阶乘之和'''
  3. #求阶乘
  4. def factorial(n):
  5.     sum = 1
  6.     for i in range(1,n+1):
  7.         sum *= i
  8.     return sum

  9. for num in range(100,1000):
  10.     num_list = [num//100,num//10%10,num%10]#分离num
  11.     sum = factorial(num_list[0])+factorial(num_list[1])+factorial(num_list[2])#求和
  12.     #print (sum,num)
  13.     if num == sum:
  14.         print (num)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 05:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表