查找给定数字的可能排列,其乘法给出所需数字
FInd Possible Permutations of Given Numbers whose Multiplication Gives the Required Number
问题:
一组由 space 分隔的数字 S 作为输入传递。数字 N 也作为输入传递。程序必须从 S 中找出 N1、N2 这两个数,使得 N1*N2 = N 并打印出来。
输入格式:
S 中由 space.
分隔的数字集
边界条件:
S 中的位数少于 50。
输出格式:
N1 后跟 N2,中间用 space(此处 N1 >= N2)
分隔
示例Input/Output 1:
输入:
6 8 5 3 9 4
552337
输出:
859 643
解释:
Using the digits given 859*643 = 552337. As 859 > 643 it is printed first.
示例Input/Output 2:
输入:
2 1 2
42
输出:
21 2
任何有关如何进行此操作的可能想法将不胜感激。
看看 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)
问题:
一组由 space 分隔的数字 S 作为输入传递。数字 N 也作为输入传递。程序必须从 S 中找出 N1、N2 这两个数,使得 N1*N2 = N 并打印出来。
输入格式: S 中由 space.
分隔的数字集边界条件: S 中的位数少于 50。
输出格式: N1 后跟 N2,中间用 space(此处 N1 >= N2)
分隔示例Input/Output 1:
输入:
6 8 5 3 9 4
552337
输出:
859 643
解释:
Using the digits given 859*643 = 552337. As 859 > 643 it is printed first.
示例Input/Output 2:
输入:
2 1 2
42
输出:
21 2
任何有关如何进行此操作的可能想法将不胜感激。
看看 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)