0

问题:
一组由空格分隔的数字 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

任何有关如何进行此操作的可能想法将不胜感激。

4

1 回答 1

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)
于 2015-06-12T15:57:55.417 回答