鱼C论坛

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

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

[复制链接]
发表于 2018-3-3 18:57:48 | 显示全部楼层
def factorial(number):
    if number == 1 or number == 0:
        return 1
    else:
        return number * factorial(number - 1)


def main():
    for i in range(100, 1000):
        bai = i // 100
        shi = i % 100 // 10
        ge = i % 100 % 10

        fac_bai = factorial(bai)
        fac_shi = factorial(shi)
        fac_ge = factorial(ge)

        if fac_bai + fac_shi + fac_ge == i:
            print(i)


if __name__ == '__main__':
    main()

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-3 21:04:21 | 显示全部楼层
import math

def main():

    m = []

    for g in range(10):
        for s in range(10):
            for b in range(1,10):
               b_f = math.factorial(b)
               s_f = math.factorial(s)
               g_f = math.factorial(g)

               m_shiji = b * 100 + s * 10 + g
               qiuhe = b_f + s_f + g_f

               if m_shiji == qiuhe:
                   m.append(m_shiji)
                   print (m_shiji)
            
        
    print (m)
            
if __name__ == "__main__":
    main()            
        

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-4 11:24:36 | 显示全部楼层
def fact(n):
    if n < 1:
        return 1
    else:
        return n * fact(n - 1)

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

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-4 21:36:08 | 显示全部楼层
def factorial(num):
    if num == 1 or num == 0:
        return 1
    else:
        return num * factorial(num - 1)

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

main()

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-5 08:27:43 From FishC Mobile | 显示全部楼层
哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-5 10:18:39 | 显示全部楼层
def jiecheng(n):
    cc=1
    for i in range(1,n+1):
        cc*=i

    return cc
        
for iii in range(1,10):
    for ii in range(1,10):
        for i in range(0,10):
            if (iii*100+ ii *10+i)== (jiecheng(iii)+jiecheng(ii)+jiecheng(i)):
                print (iii*100+ ii *10+i)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-5 14:50:50 | 显示全部楼层
本帖最后由 Chase_Kas 于 2018-3-5 15:14 编辑
def factorial(a):
    product = 1
    if a == 0:
        return 1
    else:
        for i in range(1, a + 1):
            product *= i
        return product

print([x*100+y*10+z for x in range(1,10) for y in range(10) for z in range(10) \ 
if x*100+y*10+z==factorial(x)+factorial(y)+factorial(z)])
题目说明有点问题,“找出这样的三位数,其值等于其各位数字的阶乘。”
应该是:”各位数字阶乘的和”

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-5 20:15:28 | 显示全部楼层
import math
for number in range(100,1000):
    b = number//100
    s = number//10%10
    g = number%10
    if math.factorial(b)+math.factorial(s)+math.factorial(g) == number:
        print(number)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-5 21:15:52 | 显示全部楼层
def jiecheng(x):
        a = 1
        for i in range(1,x+1):
                a *= i
        return a

for i in range(100,1000):
        x = [int(z) for z in list(str(i))]
        if jiecheng(x[0])+jiecheng(x[1])+jiecheng(x[2]) == i:
                print(i)
结果:145

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-5 21:40:32 | 显示全部楼层
本帖最后由 t6am3 于 2018-3-5 21:41 编辑

def factorial(x):
    tmp = x
    for i in range(1,x):
        x *= (tmp-i)
    return x
for i in range(100, 1000):
    sum = 0
    for j in tuple(str(i)):
        sum += factorial(int(j))
        if sum == i:
            print('找到这样一个数:', i)

另外想问一下如何以Notepad++格式输出啊。。。

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-6 10:44:29 | 显示全部楼层
本帖最后由 雪人爱晒大太阳 于 2018-3-6 10:48 编辑

感觉自己用到的是最笨的方法了吧,时间复杂度和空间复杂度应该都很高的~
想看看其他鱼油用的方法~
#First define the FACTORIAL function
def fac(n):
    if n == 0:
        return 1
    else:
        return n*fac(n-1)

#Second define the SUM Factorial Function
def sun_fac(k):
    'k=abc we need to excrat a,b,c from k'
    a = k//100
    b = k%100//10
    c = k%10
    return fac(a) + fac(b) + fac(c)

#Third define MAIN Function
def main():
    ans=[]
    for i in range(100,1000):
        if i == sun_fac(i):
            ans.append(i)
    return ans

#Run programme
main()

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-7 08:38:34 | 显示全部楼层

看了一下你的最简洁,完美
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 08:55:49 | 显示全部楼层
LargeCat 发表于 2018-2-28 12:53
结果:
1*2*3*4*5=120
1*2*3*4*5*6=720

看着有些复杂,懵逼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 09:02:21 | 显示全部楼层

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

使用道具 举报

发表于 2018-3-7 09:06:39 | 显示全部楼层
from math import factorial

for n in range(100,1000):
    a = n % 10
    b = (n//10)%10
    c = n//100

    if n == factorial(a)+factorial(b)+factorial(c):
        print(n)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-7 20:19:40 | 显示全部楼层

导进了factorial 函数算是偷懒了hah
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-2 12:55:29 | 显示全部楼层
def fac(n):
    if n==1 or n == 0:
        return 1
    else:
        return n*fac(n-1)

for i in range(100,1000):
    i = str(i)
    if (fac(int(i[0])) + fac(int(i[1])) +fac(int(i[2]))) ==int(i):
        print(int(i))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-19 18:42:27 | 显示全部楼层
def getFactorialNum() :
        num = 100
        list1 = []
        while num < 1000 :
                if (factorial(num // 100) + factorial(num % 100 // 10) + factorial(num % 10) == num) :
                        list1.append(num)
                        num += 1
                else :
                        num += 1
        print(list1)

#获取数值的阶乘
def factorial(num) :
        temp = 1
        while num > 1 :
                temp *= num
                num -= 1
        return temp
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-5 15:19:52 | 显示全部楼层
from functools import reduce

def getSum(n):
    sum1 = 0
    for i in str(n):
        if i != "0":
            sum1 += reduce(lambda x,y:x*y,range(1,int(i)+1))
    return sum1

def fun158():
    list1 = []
    for n in range(100,1000):
        if n == getSum(n):
            list1.append(n)
    return list1

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

使用道具 举报

发表于 2020-6-4 16:55:00 | 显示全部楼层
def jie(n):
    sum1=1
    for i in range(1,n+1):
        sum1*=i
    return sum1
def fun106():
    for i in range(100,1000):
        a=str(i)
        if jie(int(a[0])) + jie(int(a[1])) +jie(int(a[2])) == i:
            print(i)
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 01:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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