找到给定数的可能排列,其乘法得到所需的编号

2024-06-12 06:41:02 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:
以空格分隔的一组数字S作为输入传递。数字N也作为输入传递。程序必须从S中找到两个数字N1,N2,这样N1*N2=N并打印出来。在

输入格式: S中用空格隔开的一组数字。在

边界条件: S中的位数小于50。在

输出格式: N1后跟N2,用空格隔开(这里N1>;=N2)

示例输入/输出1:

输入:

6 8 5 3 9 4
552337

输出:

^{pr2}$

说明:

Using the digits given 859*643 = 552337. As 859 > 643 it is printed first.

示例输入/输出2:

输入:

2 1 2
42

输出:

21 2

任何关于如何进行这项工作的想法都将受到赞赏。在


Tags: thegt程序示例格式数字givenusing
1条回答
网友
1楼 · 发布于 2024-06-12 06:41:02

看看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

用法:

^{pr2}$

相关问题 更多 >