Vertical Form Question

题目:

找出所有形如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;
}
  1. 要掌握sprintf的用法
  2. 使用判断标志进行判断
  3. 注意std输出的格式是否与样例一致

猜你喜欢

转载自www.cnblogs.com/dreamworldclark/p/9400237.html