鱼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循环更方便些

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 20:01:23 | 显示全部楼层
是阶乘和还是他们三个的阶乘
想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

answer = []

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

print(answer)
    
想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


for i in range(100, 1000):
    a = int(i / 100)
    b = int(i / 10) % 10
    c = i % 10
    if (i == factorial(a) + factorial(b) + factorial(c)):
        print(i)


所得为145

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

def flower(num):
    a, b, c = list(str(num))
    if jc(int(a)) + jc(int(b)) + jc(int(c)) == num:
        return True
    else:return False

if __name__ == '__main__':
    flowers = list()
    for i in range(100, 1000):
        if flower(i):
            flowers.append(i)
    print(flowers, len(flowers))

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 01:16:37 | 显示全部楼层
剛學習編程的新手 每日練習奠定穩固的編程基礎!
def factorial(number):
    if number == 1 or number == 0:
        return 1
    return number*factorial(number-1)

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)\
          if i*100+j*10+k == factorial(i)+factorial(j)+factorial(k)]
print(answer)

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

    return factorial_sum == num


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

print()

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 09:14:32 | 显示全部楼层
def calc(x):
    result=1
    x=int(x)
    for i in range(1,x+1):
        result*=i
        i+=1
    return result
        
def main():
    for i in range(100,1000):
        temp=str(i)
        result=calc(temp[0])+calc(temp[1])+calc(temp[2])
        if result==i:
            print(i)
    
if __name__=='__main__':
    main()

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

def fun158():

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

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

if __name__ == '__main__':
    print(fun158())

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 10:51:07 | 显示全部楼层
为啥看不到别人的答案啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

for i in range(100,1000):
    sum = 0
    temp = i
    while temp:
        sum += fact(temp%10)
        temp //= 10
    if sum == i:
        print(i)

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

for num in range(100,1000):
    num_list = [num//100,num//10%10,num%10]#分离num
    sum = factorial(num_list[0])+factorial(num_list[1])+factorial(num_list[2])#求和
    #print (sum,num)
    if num == sum:
        print (num)

评分

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

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 00:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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