鱼C论坛

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

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

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


  6. def main():
  7.     for i in range(100, 1000):
  8.         bai = i // 100
  9.         shi = i % 100 // 10
  10.         ge = i % 100 % 10

  11.         fac_bai = factorial(bai)
  12.         fac_shi = factorial(shi)
  13.         fac_ge = factorial(ge)

  14.         if fac_bai + fac_shi + fac_ge == i:
  15.             print(i)


  16. if __name__ == '__main__':
  17.     main()
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://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

查看全部评分

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

使用道具 举报

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

  6. for i in range(100, 1000):
  7.     if i == fact(i // 100) + fact((i // 10) % 10) + fact(i % 10):
  8.         print(i)
复制代码

评分

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

查看全部评分

小甲鱼最新课程 -> https://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

查看全部评分

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

使用道具 举报

发表于 2018-3-5 08:27:43 From FishC Mobile | 显示全部楼层
哈哈
小甲鱼最新课程 -> https://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

查看全部评分

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

使用道具 举报

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

  9. print([x*100+y*10+z for x in range(1,10) for y in range(10) for z in range(10) \
  10. if x*100+y*10+z==factorial(x)+factorial(y)+factorial(z)])
复制代码

题目说明有点问题,“找出这样的三位数,其值等于其各位数字的阶乘。”
应该是:”各位数字阶乘的和”

评分

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

查看全部评分

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

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

  6. for i in range(100,1000):
  7.         x = [int(z) for z in list(str(i))]
  8.         if jiecheng(x[0])+jiecheng(x[1])+jiecheng(x[2]) == i:
  9.                 print(i)
复制代码

结果:145

评分

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

查看全部评分

小甲鱼最新课程 -> https://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

查看全部评分

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

使用道具 举报

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

感觉自己用到的是最笨的方法了吧,时间复杂度和空间复杂度应该都很高的~
想看看其他鱼油用的方法~

  1. #First define the FACTORIAL function
  2. def fac(n):
  3.     if n == 0:
  4.         return 1
  5.     else:
  6.         return n*fac(n-1)

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

  14. #Third define MAIN Function
  15. def main():
  16.     ans=[]
  17.     for i in range(100,1000):
  18.         if i == sun_fac(i):
  19.             ans.append(i)
  20.     return ans

  21. #Run programme
  22. main()
复制代码

评分

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

查看全部评分

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

使用道具 举报

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

看了一下你的最简洁,完美
小甲鱼最新课程 -> https://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

看着有些复杂,懵逼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

  2. for n in range(100,1000):
  3.     a = n % 10
  4.     b = (n//10)%10
  5.     c = n//100

  6.     if n == factorial(a)+factorial(b)+factorial(c):
  7.         print(n)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

导进了factorial 函数算是偷懒了hah
小甲鱼最新课程 -> https://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))
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  11. #获取数值的阶乘
  12. def factorial(num) :
  13.         temp = 1
  14.         while num > 1 :
  15.                 temp *= num
  16.                 num -= 1
  17.         return temp
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. def getSum(n):
  3.     sum1 = 0
  4.     for i in str(n):
  5.         if i != "0":
  6.             sum1 += reduce(lambda x,y:x*y,range(1,int(i)+1))
  7.     return sum1

  8. def fun158():
  9.     list1 = []
  10.     for n in range(100,1000):
  11.         if n == getSum(n):
  12.             list1.append(n)
  13.     return list1

  14. print(fun158())
复制代码
小甲鱼最新课程 -> https://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)
   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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