题目描述
找出所有形如 abc∗de (三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出。
输入
输入包含多组测试用例。
对于每组测试用例,输入一个字符串s,代表数字集合。
输出
输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。(竖式按照3位数的大小从小到大输出~)
样例输入
2357
样例输出
<1>
775
X 33
-----
2325
2325
-----
25575
The number of solutions: 1
题解代码如下
#include<bits/stdc++.h>
using namespace std;
char s[20]; ///存储字符串
bool st[10]; ///标记访问数组
bool judge(int x){
while(x){
if(!st[x%10]) return false;
x /= 10;
}
return true;
}
int main(){
while(scanf("%s",s) != EOF){
memset(st,0,sizeof st);
int len = strlen(s),id = 0;
for(int i=0;i<len;i++) st[s[i] - '0'] = 1; ///将所有数
for(int x = 100;x <= 999;x ++){ ///枚举三位数
for(int y = 10;y <= 99;y ++){ ///枚举两位数
int tmp1 = x * (y%10); ///三位数乘以两位数的个位
int tmp2 = x * (y/10); ///三位数乘以两位数的十位
int tmp3 = x * y; ///存储结果
if(judge(x)&&judge(y)&&judge(tmp1)&&judge(tmp2)&&judge(tmp3)){
printf("<%d>\n",++id);
printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n",x,y,tmp1,tmp2,tmp3);
}
}
}
printf("The number of solutions: %d\n",1);
}
}