题目:找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。
输入:数字集合
2357
输出:所有竖式及解的个数
<1>
775
X 33
-----
2325
2325
-----
25575
代码
#include<stdio.h>
#include<string.h>
#define maxn 99
int main(){
char a[maxn],s[20];
int x,y,z,ok,count=0;
scanf("%s",a);
for(int i=100;i<=999;i++)
for(int j=10;j<=99;j++){
x=i*(j/10);
y=i*(j%10);
z=i*j;
ok=1;
sprintf(s,"%d%d%d%d%d",i,j,x,y,z); //把初始值、过程值、最后结果都放到s数组里
for(int k=0;k<strlen(s);k++){ //判断是否满足要求
if(!strchr(a,s[k])) ok=0;
//if(!memchr(a,s[k],strlen(a))) ok=0;
}
if(ok){
printf("<%d>\n",++count);
printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n",i,j,x,y,z); //打印竖式
}
}
printf("The number of solutions = %d\n",count);
return 0;
}
- strchr函数的用法
声明:
char *strchr(const char *str, int c)
参数:str是要被检索的字符串;c是要搜索的字符。
返回值:若成功找到,则返回第一次出现c字符的位置;若未找到,则返回null。
- 输出函数——printf、fprintf、sprintf三个亲兄弟
- printf输出到屏幕
- fprintf输出到文件
- sprintf输出到字符串,要保证字符串足够大。多大才算足够大呢?答:字符个数+1.
- strlen函数
获取字符串的实际长度,返回值是结束标记'\0'之前的字符个数
- strcpy(a,b)用于赋值,strcmp(a,b)用于比较,strcat(a,b)用于连接,都在string.h中声明