竖式问题
题目:
找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点)。
样例输入:2357
样例输出:
<1>
..775
X..33
-----
.2325
2325.
-----
25575
The number of solutions = 1
题意:[code=C/C++][/code]
775 7 ,5在{2, 3, 5, 7}集合中
X 33 3在{2, 3, 5, 7}集合中
-----------------------------------------------------
2325 2,3,5在{2, 3, 5, 7}集合中
2325
------------------------------------------------------
25575 2, 5, 7在{2, 3, 5, 7}集合中
输入一个数,表示这个数组中含有这几个数的元素。
#include<stdio.h>
#include<string.h>
int main(){
int i,j,abc,bc,c,count,n,ok,k;
char s[20];
char buf[100];
scanf("%s",s);
count=0;
for(i=100;i<=999;i++)//书中从111,11开始。不知道为什么。
for(j=10;j<=99;j++){
abc=i*(j%10);
bc=i*(j/10);
c=i*j;
n=sprintf(buf,"%d%d%d%d%d",i,j,abc,bc,c);
ok=1;
for(k=0;k<strlen(buf);k++)
if(strchr(s,buf[k])==NULL)
ok=0;
if(ok){
printf("<%d>\n",++count);
printf("%5d\nX%4d\n--------\n%5d\n%4d\n--------\n%5d\n",i,j,abc,bc,c);
}
}
printf("The number of soulutions=%d\n",count);
}
总结:枚举法一次列出来。学习。srtchr(s,"c")函数。比较字符c 第一次出现在字符串s中的位置。返回指针。