已知abcd*9=bcda,数字表示就是1234*9=4321,要求用Python写出表达式
发布网友
发布时间:2022-06-03 04:06
我来回答
共4个回答
热心网友
时间:2023-10-11 06:55
import itertools
permutations = itertools.permutations
digitals = range(10)
def tuple2int(*elements):
return rece(lambda x,y: x*10+y, elements, 0)
for (a, b, c, d) in permutations(digitals,4):
if tuple2int(a, b, c, d) * 9 == tuple2int(d, c, b, a):
print "{abcd * 9 = dcba}: a=%d b=%d c=%d d=%d"% (a, b, c, d)
if tuple2int(a, b, c, d) * 9 == tuple2int(b, c, d, a):
print "{abcd * 9 = bcda}: a=%d b=%d c=%d d=%d"% (a, b, c, d)
{abcd * 9 = dcba}: a=1 b=0 c=8 d=9
""" 利用itertools模块提供的permutations排列生产函数产生由数字0~9的组成的4位排列数字;
用自定义函数tuple2int将多个数字组成的元组转换成整数 (a, b, c, d) ==> abcd;
"if tuple2int(a,b,c,d)*9==tuple2int(d,c,b,a):" 用于判断abcd*9==dcba
"if tuple2int(a,b,c,d)*9==tuple2int(b,c,d,a):" 用于判断abcd*9==bcda
..
"""
热心网友
时间:2023-10-11 06:55
#假设这个数为x
x = 1000
while x < 10000:
if x*9 == int(str(x)[3]+str(x)[2]+str(x)[1]+str(x)[0]):
print(x)
x+=1
热心网友
时间:2023-10-11 06:55
是这样?
for i in range(1000,10000):
i_str = list(str(i))
i_str.reverse()
if str(i * 9) == ''.join(i_str):
print i追问大神啊!能解释一下实现原理么?
追答思路:
0、从4位整数中遍历,作为乘数
1、根据规则 abcd*9=bcda ,知道了乘数和积的关系
2、将乘数反序,作为积。int -> str -> list -> list.reverse() -> str -> int
3、符合 乘数 * 9 = 积 条件的就是了
热心网友
时间:2023-10-11 06:56
这个已知条件来自于一张图片吧.我没悟出道理.