找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出。
找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出。
一行,竖式中的数字集合(相邻数字之间没有空格)。
每个竖式共八行,:(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点,也就是说注意每行的域宽)
第一行:<编号>,编号为1~n(竖式的总数);
第二行:..abc,两空格+三位数abc(域宽为5);
第三行:X..de,X+两空格+二位数de(域宽为5);
第四行::-----,五个“-”;
第五行:.abc*e,空格+abc*e的结果(域宽为5);
第六行:abc*d,空格+abc*d的结果(域宽为4);
第七行:-----,五个“-”;
第八行:abc*de(域宽为5);
(第2~n个竖式,每个竖式之间空一行)
最后一行:The number of solutions=n;n为竖式总数。
没有满足要求的竖式,输出:The number of solutions=0
6789<1>
986
X 88
-----
7888
7888
-----
86768
<2>
997
X 77
-----
6979
6979
-----
76769
<3>
997
X 78
-----
7976
6979
-----
77766
The number of solutions=3
本题的解题策略是尝试所有的abc和de,判断是否满足条件。写出如下的伪代码:
for(abc = 111; abc <= 999; abc++)
for(de = 11; de <= 99; de++)
if(“abc*de”是个合法的竖式) {
printf("<%d>\n", ++count);
打印abc*de的竖式和其后的空行
}
printf("The number of solutions = %d\n", count);
首先计算第一行乘积x=abc*e,然后是第二行y=abc*d,最后是总乘积z=abc*de,将abc, de, x, y, z这五个整数放入到一个字符串中:sprintf(buf, "%d%d%d%d%d", abc, de, x, y, z),接下来可能用strchr函数检查这五个整数是否符合要求。