鱼C论坛

 找回密码
 立即注册
查看: 7514|回复: 79

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

[复制链接]
发表于 2018-2-28 10:29:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2018-3-5 19:54 编辑

我们的玩法做了一下改变:

1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。

题目:
再出一个简单的题目。水仙花数大家都熟悉, 即一个 3 位数等于其各位数字的立方和。现在把题目稍作修改,找出这样的三位数,其值等于其各位数字的阶乘。

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2018-2-28 10:43:00 | 显示全部楼层
  1. def getJiecheng(n = 10):
  2.     #  取得0-9的阶乘
  3.     result = [1]
  4.     x = 1
  5.     for i in range(1, n):
  6.         x *= i
  7.         result.append(x)
  8.     return result

  9. a = getJiecheng()
  10. result = []
  11. for i in range(100, 1000):
  12.     x = sum([a[int(i)] for i in str(i)])
  13.     if x == i:
  14.         result.append(i)
  15. print(result)

  16. #  只有一个数字符合要求。
  17. #  [145]
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 11:01:54 | 显示全部楼层
  1. #题目读不清楚,“各位数字的阶乘”感觉表述不清。我当成是“各位数字阶乘和”算的
  2. def fac(n):  #阶乘函数
  3.     if n == 0 or n ==1:
  4.         return 1
  5.     return n * fac(n-1)

  6. for i in range(100, 1000):
  7.     a = i % 10  #个位数
  8.     b = (i // 10) % 10 #十位数
  9.     c = i //100  #百位数
  10.     if i == (fac(a) + fac(b) + fac(c)):
  11.         print(i)
复制代码

评分

参与人数 2荣誉 +6 鱼币 +6 收起 理由
Andy0214 + 3 + 3 感谢楼主无私奉献!
冬雪雪冬 + 3 + 3 是的,题目没有写清楚。

查看全部评分

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

使用道具 举报

发表于 2018-2-28 11:03:29 | 显示全部楼层
  1. t = lambda x:(x*t(x-1))if x > 1 else x

  2. for i in range(100, 1000):
  3.     sum = 0
  4.     temp = i
  5.     while temp:
  6.         sum += t(temp%10)
  7.         temp //= 10
  8.     if i == sum:
  9.         print(i)
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 11:13:03 | 显示全部楼层
def r158():
    for a in range(1,9):
        z=rank(a)
        for b in range(1,9):
            x=rank(b)
            for c in range(1,9):
                   y=rank(c)
                   d=100*a+10*b+c
                   if d == x+y+z:
                       print(d)

def rank(x):
    if x == 0 :
        return 1
    else:
        return x*rank(x-1)

r158()

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 11:55:59 | 显示全部楼层
import math
#math.factorial(3)
for i in range(100,999):
        x = i//100
        y = (i%100)//10
        z = (i%100)%10
        '''if i == x**3+y**3+z**3:
                print(x,y,z,'-->',i)'''
               
        if i == math.factorial(x) + math.factorial(y) + math.factorial(z):
                print('xxx',i)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 12:53:10 | 显示全部楼层
本帖最后由 LargeCat 于 2018-2-28 20:36 编辑
  1. def f(n):
  2.     if n==1:
  3.         return 1
  4.     else:
  5.         return f(n-1)*n

  6. i=1
  7. while f(i)<1000:
  8.     if f(i)>=100:
  9.         print('*'.join([str(x) for x in list(range(i+1))[1:]])+'='+str(f(i)))
  10.     i+=1
复制代码


结果:
1*2*3*4*5=120
1*2*3*4*5*6=720

++++++++++++++++++++++++++++++++++++

怕理解错误, 又做了另外一个:

  1. def f(n):
  2.     if n==1 or n==0:
  3.         return 1
  4.     else:
  5.         return f(n-1)*n

  6. i=100
  7. while i<1000:
  8.     sum=0
  9.     for x in str(i):
  10.         sum=sum+f(int(x))
  11.     if sum==i:
  12.         print('!+'.join(str(i))+'!='+str(sum))
  13.     i+=1
复制代码


结果:
1!+4!+5!=145

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 13:17:40 | 显示全部楼层
#求阶乘函数
def jiecheng(n):
    if n<2:
        return 1
    else:
        return jiecheng(n-1)*n

for i in range(1,10):
    for j in range(0,10):
        for k in range(0,10):
            if 100*i+10*j+k==jiecheng(i)+jiecheng(j)+jiecheng(k):
                print(str(100*i+10*j+k))
            else:
                continue

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 14:11:36 | 显示全部楼层
def factorial(n):
    assert n >= 0
    if n < 2:
        return 1
    else:
        return n * factorial(n-1)
n=100
while n<1000:
    a=n//100
    b=(n//10)%10
    c=n%10
    if factorial(a) + factorial(b) + factorial(c) ==n:
        print(n)
        n=n+1
    else:
        n=n+1

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 14:22:09 | 显示全部楼层
#定义一个方法获得这个数字的阶乘:
def getFactorial(num):
    if(num ==0):
        return 1
    else:
        result = 1
        for i in range(1,num+1):
            result = result*i
        return result
for i in range(100, 1000):
    x = math.floor(i/100)  #获得百位数
    y = math.floor((i - x*100)/10)  #获得十位数
    z = i - math.floor(i/10) *10  #获得个位数
    if i == getFactorial(x) + getFactorial(y) + getFactorial(z):
        print(i, end=', ')


145,

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 14:37:26 | 显示全部楼层
for i in range(100,1000):
    bai = int(i/100)
    shi = int((i-bai*100)/10)
    ge = int(i%10)
    baij = 1
    shij = 1
    gej =1
    for x in range(1,bai+1):
        baij = baij * x
    for y in range(1,shi+1):
        shij = shij * y
    for z in range(1,ge+1):
        gej = gej * z
    he = baij+shij+gej
    if i == (baij+shij+gej):
        print(i)

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 14:40:26 | 显示全部楼层
本帖最后由 8306最硬 于 2018-2-28 14:43 编辑

是各阶乘之和么
  1. from math import factorial
  2.    
  3. for n in range(100, 1000):
  4.     if sum( factorial(x) for x in map( int, str(n) ) ) == n:
  5.         print(n)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 是的,我没有说清楚

查看全部评分

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

使用道具 举报

发表于 2018-2-28 14:46:52 | 显示全部楼层
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

for num in range(100,1000):
    nums = [factorial(int(i)) for i in "".join(str(num))]

    if num == sum(nums):
        print(str(num))

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 15:41:20 | 显示全部楼层
  1. import math
  2. for i in range(1,10):
  3.     for j in range(0,10):
  4.         for k in range(0,10):
  5.            if i * 100+ j * 10 + k == math.factorial(i) + math.factorial(j) + math.factorial(k):
  6.                 print(i * 100 + j * 10 + k)

复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 15:44:12 | 显示全部楼层
  1. def jie(num):
  2.     if num<=1:
  3.         return 1
  4.     else:
  5.         return num*jie(num-1)
  6. for i1 in range(1,10):
  7.     for i2 in range(0,10):
  8.         for i3 in range(0,10):
  9.             if jie(i1)+jie(i2)+jie(i3)==int(str(i1)+str(i2)+str(i3)):
  10.                 print(jie(i1)+jie(i2)+jie(i3))
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 16:07:59 | 显示全部楼层
  1. def fac(n):
  2.     m = 1
  3.     for i in range(1,n+1):
  4.         m *= i
  5.     return m

  6. def f():
  7.     s = 0
  8.     L = []
  9.     for x in range(100,1000):
  10.         for i in str(x):
  11.             s += fac(int(i))
  12.         if s == x:
  13.             L.append(x)
  14.         else:
  15.             s = 0
  16.     return L

  17. f()
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 16:08:34 | 显示全部楼层
  1. def q158():
  2.     i=100
  3.     while i < 1000:
  4.         j=i
  5.         a=j%10
  6.         j//=10
  7.         b=j%10
  8.         c=j//10
  9.         if i == fact(a)+fact(b)+fact(c):
  10.             print(i)
  11.         i+=1
  12. def fact(n):
  13.     t=1
  14.     while n >0:
  15.         t*=n
  16.         n-=1
  17.     return t
复制代码


只有145这个数满足

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 17:18:35 | 显示全部楼层
  1. def main():
  2.     def getFac(n):
  3.         result = n
  4.         for i in range(1,n):
  5.             result*=i
  6.         return result
  7.     for i in range(100,1000):
  8.         j = 0
  9.         for each in str(i):
  10.             j+=getFac(int(each))
  11.         if i == j:
  12.             yield i
  13. if __name__ == "__main__":
  14.     for i in main():
  15.         print(i)
  16.         input()
复制代码

评分

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

查看全部评分

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

使用道具 举报

发表于 2018-2-28 17:49:26 | 显示全部楼层
ddfsdagasfg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-28 17:50:28 | 显示全部楼层
import random
secret = random.randint(1,10)
print("----------我爱鱼C工作室----------")
temp=input("不妨猜一下小甲鱼现在心里想的是哪个数字:")
guess=int(temp)
while guess != secret:
    temp = input("哎呀,猜错了,请重新输入吧:")
    guess = int(temp)
    if guess == secret:
        print("猜中了")
    else:
        if guess > secret:
               print("大了")
        else:
               print("小了")
print ("游戏结束")            
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 05:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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