鱼C论坛

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

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

[复制链接]
发表于 2018-3-1 11:03:55 | 显示全部楼层
def jiecheng(num):
    if num == 0:
        return 1
    else:
        return (num * jiecheng(num - 1))


for i in range(100,1000):
    list_i=list(str(i))
    result = 0
    for n in list_i:
        result += jiecheng(int(n))

    if result == i:
        print('%d的值等于其各位数字的阶乘之和!' % i)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-1 11:14:21 | 显示全部楼层
难道不是阶乘之和?

def factorial(n):
    c = 1
    for i in range(1, n+1):
        c *= i
    return c
for i in range(100,1000):
    a = int(i / 100)
    b = int(i / 10) - 10 * a
    c = i -100 * a - b * 10
    t =factorial(a) + factorial(b) + factorial(c)
    if t == i:
        print(i)
        continue


评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-1 11:48:24 | 显示全部楼层
  1. from math import factorial as f
  2. print([number for number in range(100,1000) if sum(f(int(i)) for i in str(number))==number])
复制代码

[145]

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-1 12:42:44 | 显示全部楼层
为什么有些题目后面的回复设置称“此帖仅作者可见”
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 16:00:02 | 显示全部楼层
应该是各位数的阶乘之和吧

  1. from functools import reduce

  2. def fact(n):
  3.     if n == 0:
  4.         return 1
  5.     else:
  6.         return reduce(lambda x, y: x*y, range(1, n+1))      # 求阶乘

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

结果:
145

评分

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

查看全部评分

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

使用道具 举报

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



  6. for i in range(100,1000):
  7.     a = 0
  8.     num = i
  9.     while num:
  10.         n = num%10
  11.         num = num//10
  12.         a = a + love(n)
  13.     if a == i:
  14.         print(i)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-1 19:18:34 | 显示全部楼层
看下答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-1 21:17:11 | 显示全部楼层
其值等于各位数字的阶乘??是阶乘之和吗?
  1. import math

  2. def fun(n=3):
  3.     return [i for i in range(10**(n-1), 10**n)
  4.             if i == sum(map(math.factorial, (int(j) for j in str(i))))]
复制代码

不过写成函数也没啥意思,太慢了,n=7就受不了了

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-2 08:30:45 | 显示全部楼层
  1. def n(x):
  2.     if x<=1:
  3.         return 1
  4.     else:
  5.         return n(x-1)*x
  6. for i in range(100,1000):
  7.     s=str(i)
  8.     a=int(s[0])
  9.     b=int(s[1])
  10.     c=int(s[2])
  11.     if i==n(a)+n(b)+n(c):
  12.         print(i)
复制代码

放假归来,老实写作业

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-2 11:21:29 | 显示全部楼层
def ladder(number):
        result = 1
        for i in range(1,number+1):
                result = result * i

        return result

def find(number):
        bit1 = number % 10
        bit2 = number // 10 % 10
        bit3 = number //100
        if number == ladder(bit1)+ladder(bit2)+ladder(bit3):
                return number
               

        return 0

if __name__ == '__main__':
        for number in range(100,1000):
                if find(number):
                        print(number)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-2 17:32:30 | 显示全部楼层
666
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-2 19:09:11 | 显示全部楼层
  1. def cal(n):   #计算阶乘的函数
  2.     result = 1
  3.     for i in range(1,n):
  4.         result *= i
  5.     return result
  6.    
  7. for each in range(100,1000):
  8.     s = str(each)
  9.     if cal(int(s[0])) + cal(int(s[1])) + cal(int(s[2])) == each:
  10.         print(each)
复制代码

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

使用道具 举报

发表于 2018-3-2 19:28:16 | 显示全部楼层
def factorial(n):
   
    fact = 1
   
    for i in range(1,n+1):
        
        fact *= i
        
    return fact

for i in range(100,1000):

    j = i

    m = 0
   
    while j > 0:
        
        a = j % 10

        m += factorial(a)

        j //= 10

    if i == m:

        print(i)





//输出好像只有145

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-2 20:47:33 | 显示全部楼层
  1. def fun(n):
  2.     if n == 1:
  3.         return 1
  4.     else:
  5.         return n * fun(n-1)

  6. for i in range(100,1000):
  7.     sun = 0
  8.     for x in str(i):
  9.         if x == '0':
  10.             continue
  11.         sun += fun(int(x))
  12.     if sun == i:
  13.         print(i)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-2 21:53:05 | 显示全部楼层
def jiecheng(number):
    global result
    result = 1
    if number >1:
        for each in range(1,number+1):
            result = result * each
    return result

for each in range(100,999):

    a = each % 10
   
    b = (each // 10) % 10
   
    c = each // 100
   
   
    if each == int(jiecheng(a)) + int(jiecheng(b)) + int(jiecheng(c)):
        print(each)
   

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-3 14:06:56 | 显示全部楼层
  1. import math
  2. for jj in range(1,10):
  3.     #判断某一数字阶乘>百位数值的范围
  4.     if math.factorial(jj)>jj*100:
  5.         a=[]
  6.         #列出阶乘的列表
  7.         jc = [math.factorial(i) for i in range(jj)]
  8.         #获取阶乘最大三位数值范围
  9.         for ii in range(100,sum(jc[jj-3:])+1):
  10.             #判断数值符合的条件
  11.             if ii == math.factorial(divmod(divmod(ii,10)[0],10)[0])+math.factorial(divmod(divmod(ii,10)[0],10)[1])+math.factorial(divmod(ii,10)[1]):
  12.                 a.append(ii)
  13.         break
  14. print(a)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-3 16:43:14 | 显示全部楼层
LZ题意没明确啊,应该是各位数字阶乘之和吧
  1. '''
  2. 水仙花数大家都熟悉, 即一个 3 位数等于其各位数字的立方和。
  3. 现在把题目稍作修改,找出这样的三位数,其值等于其各位数字的阶乘之和。
  4. '''
  5. #求一个数字的阶乘
  6. def funa(n):
  7.     if (n==0):
  8.         return 1
  9.     else:
  10.         return n*funa(n-1)
  11.    
  12. #求一个三位数的各位数字阶乘之和
  13. def funb(n):
  14.     a=funa(n//100)
  15.     b=funa(n%100//10)
  16.     c=funa(n%10)
  17.     return a+b+c

  18. for i in range(100,1000):
  19.     if (i==funb(i)):
  20.         print(i)
  21.         
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-3 16:55:32 | 显示全部楼层
for i in range(100,1000):
    a = i % 10
    b = (i//10)%10
    c = i // 100
    def function(x):
        result = x
        for l in range(1,x):
            result *= l
        return result
    result = function(a) + function(b) + function(c)
    if result == i:
        print(i)

评分

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

查看全部评分

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

使用道具 举报

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


def jiecheng(k):
    if k == 1 :
        return(1)
    else:
        return k * jiecheng(k - 1)



for i in range(1,7):                #7的阶乘已经超过一千
    for j in range(1,7):            #没有必要计算100-1000那样太费时
        for m in range(1,7):
            all = 0
            all = jiecheng(i) + jiecheng(j) + jiecheng(m)
            if all < 1000 & all == (i * 100 + j * 10 + m):
                print(all)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-3 17:24:15 | 显示全部楼层
  1. def recursion(n):
  2.     result = n
  3.     for i in range(1,n):
  4.         result *= i
  5.     return result


  6. def number(i):
  7.     sum1 = 0
  8.     temp = i
  9.     while temp:
  10.         a = temp % 10
  11.         b = recursion(a)
  12.         sum1 += b
  13.         temp = temp // 10
  14.     if sum1 == i:
  15.         print(i,end='')

  16. for i in range(100,1000):
  17.     number(i)
复制代码



RESTART: C:/Users/Administrator/AppData/Local/Programs/Python/Python36-32/三位数.py
145
>>>

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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