龙空技术网

python 求解竖式问题

青梅煮酒快意江湖 168

前言:

今天姐妹们对“python输入整数x计算112”大概比较关怀,你们都需要知道一些“python输入整数x计算112”的相关内容。那么小编在网上汇集了一些对于“python输入整数x计算112””的相关文章,希望咱们能喜欢,看官们快快来学习一下吧!

问题描述:

找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。

//输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。

具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点)。

样例输入:2357

样例输出:

<1>

..775

X..33

-----

.2325

2325.

-----

25575

The number of solutions = 1

这个问题可以采用普通的暴力求解的方法,但是这样的性能非常低,有没有更优雅些的方法呢?答案是有的。

分析: 既然对于其中的所有的中间结果、最终的数以及相应的因子都在输入数的集合当中,那可以将输入的数转换成一个每个字符都重复3次的字符数组,再从字符数组当中挑选出3个字符组合成一个3位数,去掉0开头的字符,当然,包含全部重复和部分重复,如输入的字符集合为12345,那生成的3位数可以是123,112,111,113等。然后在从集合中去掉重复的数值,得到的就是一个候选集合。同理,可以生成一个2位数的候选集合。接下来就是循环嵌套,遍历这两个集合,找出符合条件的解。

具体的算法如下:

1、将输入的数(只能是整数)转换成字符list,并重复3次。因为最大的因数为3位数。

2、从list中选出3个字符,形成一个3位数(不能以0开头),然后进行全排列,得到一个3位数的候选集。同理,可以得到一个2位数的候选集。

3、将这个3位数的list 和2位数的list ,分别遍历,作为乘数和被乘数,过滤出符合条件的乘数和被乘数。

4、输出结果。

核心代码如下:

核心代码1

核心代码2

核心代码3

完整代码见:

标签: #python输入整数x计算112