Python:每日一题 158
本帖最后由 冬雪雪冬 于 2018-3-5 19:54 编辑我们的玩法做了一下改变:
1. 楼主不再提供答案。
2. 请大家先独立思考”,再参考其他鱼油的解答,这样才有助于自己编程水平的提高。
3. 鼓励大家积极答题,奖励的期限为出题后24小时内。
4. 根据答案的质量给予1~3鱼币的奖励。
题目:
再出一个简单的题目。水仙花数大家都熟悉, 即一个 3 位数等于其各位数字的立方和。现在把题目稍作修改,找出这样的三位数,其值等于其各位数字的阶乘。 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)
#只有一个数字符合要求。
# #题目读不清楚,“各位数字的阶乘”感觉表述不清。我当成是“各位数字阶乘和”算的
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) 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) 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() 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 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 #求阶乘函数
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
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 #定义一个方法获得这个数字的阶乘:
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, 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: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) 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)) 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)
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)) 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() 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这个数满足 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() ddfsdagasfg 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 ("游戏结束")