竖式问题。找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但所写程序中应该输出空格,而非小数点)。
样例输入:
2357 (可以看做一个集合)。
样例输出:
<1>
..775 (在集合里面)
X..33 (在集合里面)
-----
.2325 (在集合里面)
2325. (在集合里面)
-----
25575 (在集合里面)
The number of solutions = 1
一 、 问题分析
那个集合就是我们判断程序的标准,我们可以把判断条件作为组成一个新的字符串。然后进行判断。
二 、代码
- #include <iostream>
- #include<stdio.h>
- #include <string.h>
- using namespace std;
- int t[100][100]; //大的数组在main函数外面开辟,在里面可能导致异常。
- int main(int argc, char** argv) {
- int count=0;
- char s[20],buf[99];
- scanf("%s",s);
- for(int i=100;i<1000;i++)
- for(int j=10;j<100;j++)
- {
- int ok=1;
- int x=i*j;
- int y=i*(j/10);
- int k=i*(j%10);
- sprintf(buf,"%d%d%d%d%d",x,i,j,y,k); //将输出到保存在buf里面
- for(int w=0;w<strlen(buf);w++)
- {
- if(strchr(s,buf[w])==NULL) //一个字符串中搜索单个字符
- ok=0;
- }
- if(ok)
- { count++;
- printf("<%d>\n %5d\nX %4d\n ------\n %5d\n %4d\n %5d\n",count,i,j,y,k,x);
- }
- }
- printf("The number of the solution %d",count);
- }