题目:
找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点)。
样例输入:2357
样例输出:
<1>
..775
X..33
-----
.2325
2325.
-----
25575
The number of solutions = 1
代码:
#include<iostream> #include<string.h> using namespace std; int main() { int count = 0; char s[20], buf[99]; cin>>s; for(int abc = 111;abc <= 999; abc++) for (int de = 11; de <= 99; de++) { int x = abc*(de%10); int y = abc*(de/10); int z = abc*de; //The way to make the string into the char array //to used to judge if the char in the char array s, //which users entered before. //Make sure that you know the paramters in 'sprintf' sprintf(buf, "%d%d%d%d%d", abc, de, x, y, z); int ok = 1; for(int i = 0; i < strlen(buf); i++) { if(strchr(s, buf[i]) == NULL) ok = 0; //Using the loop to search } if(ok) { printf("<%d>\n", ++count); //make sure the layout of the vertical form is the cout<<".."<<abc<<endl; //same as the example. cout<<"x.."<<de<<endl; cout<<"-----"<<endl; cout<<'.'<<x<<endl; cout<<y<<'.'<<endl; cout<<"-----"<<endl; cout<<z<<endl; } } cout<<endl<<"The number of solutions = "<<count<<endl; return 0; }
- 要掌握sprintf的用法
- 使用判断标志进行判断
- 注意std输出的格式是否与样例一致