鱼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

查看全部评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-1 11:48:24 | 显示全部楼层
from math import factorial as f 
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

查看全部评分

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

使用道具 举报

发表于 2018-3-1 12:42:44 | 显示全部楼层
为什么有些题目后面的回复设置称“此帖仅作者可见”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

评分

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

查看全部评分

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

使用道具 举报

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



for i in range(100,1000):
    a = 0
    num = i
    while num:
        n = num%10
        num = num//10
        a = a + love(n)
    if a == i:
        print(i)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-1 19:18:34 | 显示全部楼层
看下答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

def fun(n=3): 
    return [i for i in range(10**(n-1), 10**n)
            if i == sum(map(math.factorial, (int(j) for j in str(i))))]
不过写成函数也没啥意思,太慢了,n=7就受不了了

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-2 08:30:45 | 显示全部楼层
def n(x):
    if x<=1:
        return 1
    else:
        return n(x-1)*x
for i in range(100,1000):
    s=str(i)
    a=int(s[0])
    b=int(s[1])
    c=int(s[2])
    if i==n(a)+n(b)+n(c):
        print(i)
放假归来,老实写作业

评分

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

查看全部评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-2 17:32:30 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-2 19:09:11 | 显示全部楼层
def cal(n):   #计算阶乘的函数
    result = 1
    for i in range(1,n):
        result *= i
    return result
    
for each in range(100,1000):
    s = str(each)
    if cal(int(s[0])) + cal(int(s[1])) + cal(int(s[2])) == each:
        print(each)
结果:
722
723
想知道小甲鱼最近在做啥?请访问 -> 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

查看全部评分

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

使用道具 举报

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

for i in range(100,1000):
    sun = 0
    for x in str(i):
        if x == '0':
            continue
        sun += fun(int(x))
    if sun == i:
        print(i)

评分

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

查看全部评分

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

查看全部评分

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

使用道具 举报

发表于 2018-3-3 14:06:56 | 显示全部楼层
import math
for jj in range(1,10):
    #判断某一数字阶乘>百位数值的范围
    if math.factorial(jj)>jj*100:
        a=[]
        #列出阶乘的列表
        jc = [math.factorial(i) for i in range(jj)]
        #获取阶乘最大三位数值范围
        for ii in range(100,sum(jc[jj-3:])+1):
            #判断数值符合的条件
            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]):
                a.append(ii)
        break
print(a)

评分

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

查看全部评分

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

使用道具 举报

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

for i in range(100,1000):
    if (i==funb(i)):
        print(i)
        

评分

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

查看全部评分

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

查看全部评分

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

使用道具 举报

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


def number(i):
    sum1 = 0
    temp = i
    while temp:
        a = temp % 10
        b = recursion(a)
        sum1 += b
        temp = temp // 10
    if sum1 == i:
        print(i,end='')

for i in range(100,1000):
    number(i)


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

评分

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

查看全部评分

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

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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