/*
找出所有形如 abc∗de (三位数乘以两位数)的算式,使得在完整的竖式中,
所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),
输出所有竖式。每个竖式前应有编号,之后应有一个空行。
最后输出解的总数。具体格式见样例输出。
样例输入
2357
样例输出
<1>
775
X 33
-----
2325
2325
-----
25575
The number of solutions: 1
*/
/*伪代码
* char s[20];
* int count =0;
* scanf("%s",s);
* for(int abc=100;abc<=999;abc++){
* for(int cd=10;cd<=99;cd++){
* if("abc*cd"满足竖式条件){
* 输出;
* }
* }
* }
*/
#include <stdio.h>
#include <string.h>
int main()
{
int count = 0;
char s[20], buf[99]; // s存放输入的数字集合,buf存放竖式运算的数字集合
scanf("%s", s);
for (int abc = 100; abc <= 999; abc++) {
for (int de = 10; de <= 99; de++) {
int x = abc * (de % 10), y = abc * (de / 10), z = abc * de;
//x ,y分别为个位数乘积和十位数乘积 --> x+10*y=z
//将竖式运算的全部数字以字符形式存放在buf中
sprintf(buf, "%d%d%d%d%d", abc, de, x, y, z);
//遍历buf中每一个数字,查看s中是否有该数字
//-----------------------------------
int ok = 1;
for (int i = 0; i < strlen(buf); i++) {
if (strchr(s, buf[i]) == NULL) {
ok = 0;
break;
}
}
// ---------------------------------
if (ok) {
printf("<%d>\n", ++count);
printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n", abc, de, x, y, z);
}
}
}
printf("The number of solutions =%d\n",count);
return 0;
}