问题:
由空格分隔的一组数字S作为输入传递。数字N也作为输入传递。程序必须从S找到两个数字N1,N2,以便N1 * N2 = N并打印出来。
输入格式: S中的数字集用空格分隔。
边界条件: S中的位数小于50。
输出格式: N1接着用空间隔开N2(这里N1> = N2)
示例输入/输出1:
输入:
6 8 5 3 9 4
552337
输出:
859 643
说明:
Using the digits given 859*643 = 552337. As 859 > 643 it is printed first.
示例输入/输出2:
输入:
2 1 2
42
输出:
21 2
关于如何做到这一点的任何可能的想法将不胜感激。
答案 0 :(得分:0)
查看itertools.permutations
功能。然后它只是合并字符串,解析为int
并将它们相乘,直到找到正确的字符串。
或者,您可以对N进行分解,然后测试这对因子是否包含S
中的所有数字from itertools import permutations
from numpy import sqrt
def permuts(S,N):
def factorize(N):
return [ (i, N//i) for i in xrange(1,int(sqrt(N))) if N%i == 0 ]
factors = factorize(N)
for i,j in factors:
for p in permutations(str(i)+str(j)):
if ' '.join(map(str, p)) == S:
return j,i
用法:
permuts("2 1 2", 42) -> (21, 2)