冬雪雪冬 发表于 2018-2-28 10:29:57

Python:每日一题 158

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

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

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

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

shigure_takimi 发表于 2018-2-28 10:43:00

def getJiecheng(n = 10):
    #取得0-9的阶乘
    result =
    x = 1
    for i in range(1, n):
      x *= i
      result.append(x)
    return result

a = getJiecheng()
result = []
for i in range(100, 1000):
    x = sum( for i in str(i)])
    if x == i:
      result.append(i)
print(result)

#只有一个数字符合要求。
#

pony马 发表于 2018-2-28 11:01:54

#题目读不清楚,“各位数字的阶乘”感觉表述不清。我当成是“各位数字阶乘和”算的
def fac(n):#阶乘函数
    if n == 0 or n ==1:
      return 1
    return n * fac(n-1)

for i in range(100, 1000):
    a = i % 10#个位数
    b = (i // 10) % 10 #十位数
    c = i //100#百位数
    if i == (fac(a) + fac(b) + fac(c)):
      print(i)

°蓝鲤歌蓝 发表于 2018-2-28 11:03:29

t = lambda x:(x*t(x-1))if x > 1 else x

for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
      sum += t(temp%10)
      temp //= 10
    if i == sum:
      print(i)

新人JOJO 发表于 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()

大头目 发表于 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)

LargeCat 发表于 2018-2-28 12:53:10

本帖最后由 LargeCat 于 2018-2-28 20:36 编辑

def f(n):
    if n==1:
      return 1
    else:
      return f(n-1)*n

i=1
while f(i)<1000:
    if f(i)>=100:
      print('*'.join(])+'='+str(f(i)))
    i+=1

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

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

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

def f(n):
    if n==1 or n==0:
      return 1
    else:
      return f(n-1)*n

i=100
while i<1000:
    sum=0
    for x in str(i):
      sum=sum+f(int(x))
    if sum==i:
      print('!+'.join(str(i))+'!='+str(sum))
    i+=1

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

miraclexy 发表于 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

ouyunfu 发表于 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

nononoyes 发表于 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,

晓屁屁 发表于 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)

8306最硬 发表于 2018-2-28 14:40:26

本帖最后由 8306最硬 于 2018-2-28 14:43 编辑

是各阶乘之和么
from math import factorial
   
for n in range(100, 1000):
    if sum( factorial(x) for x in map( int, str(n) ) ) == n:
      print(n)

不化的冰 发表于 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 =

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

victor.xu 发表于 2018-2-28 15:41:20

import math
for i in range(1,10):
    for j in range(0,10):
      for k in range(0,10):
         if i * 100+ j * 10 + k == math.factorial(i) + math.factorial(j) + math.factorial(k):
                print(i * 100 + j * 10 + k)

wlb666 发表于 2018-2-28 15:44:12

def jie(num):
    if num<=1:
      return 1
    else:
      return num*jie(num-1)
for i1 in range(1,10):
    for i2 in range(0,10):
      for i3 in range(0,10):
            if jie(i1)+jie(i2)+jie(i3)==int(str(i1)+str(i2)+str(i3)):
                print(jie(i1)+jie(i2)+jie(i3))

dunhee 发表于 2018-2-28 16:07:59

def fac(n):
    m = 1
    for i in range(1,n+1):
      m *= i
    return m

def f():
    s = 0
    L = []
    for x in range(100,1000):
      for i in str(x):
            s += fac(int(i))
      if s == x:
            L.append(x)
      else:
            s = 0
    return L

f()

fc1735 发表于 2018-2-28 16:08:34

def q158():
    i=100
    while i < 1000:
      j=i
      a=j%10
      j//=10
      b=j%10
      c=j//10
      if i == fact(a)+fact(b)+fact(c):
            print(i)
      i+=1
def fact(n):
    t=1
    while n >0:
      t*=n
      n-=1
    return t

只有145这个数满足

timeislife 发表于 2018-2-28 17:18:35

def main():
    def getFac(n):
      result = n
      for i in range(1,n):
            result*=i
      return result
    for i in range(100,1000):
      j = 0
      for each in str(i):
            j+=getFac(int(each))
      if i == j:
            yield i
if __name__ == "__main__":
    for i in main():
      print(i)
      input()

陈俊洪 发表于 2018-2-28 17:49:26

ddfsdagasfg

陈俊洪 发表于 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 ("游戏结束")            
页: [1] 2 3 4
查看完整版本: Python:每日一题 158