1:竖式问题
描述
找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点)。
上课截的图
上课时跟着敲的代码
//竖式问题,输入一个字符串,输出满足条件的所有竖式
#include <bits/stdc++.h>
const int N = 10 + 5;
//判断x和y的乘积竖式的所有数字都在s集合中
int isValid(int x,int y,char s[]);
//拆数并判断
int isOk(int n,int f[10]);
//打印竖式
void print(int x,int y);
int main(){
char s[N];
scanf("%s",s);
int cnt = 0; //问题的解
//枚举每一个三位数
for(int i = 111;i <= 999;i++){
//枚举每一个两位数
for(int j = 11;j <= 99;j++){
if(isValid(i,j,s)){
//合法的竖式
printf("<%d>\n",++cnt); //输出第几组解
print(i,j);
printf("\n");
}
}
}
printf("The number of solutions=%d",cnt);
return 0;
}
//拆数并判断
int isOk(int n,int f[10]){
while(n){
int t = n % 10; //拆个位数
n /= 10; //去掉个位数
if(f[t] == 0){
//当前数在不在数字集合f中
return 0;
}
}
return 1