找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合,输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但所写程序中应该输出空格,而非小数点)
样例输入:
2357
样例输出:
<1>
..775
X..33
-----
.2325
2325.
-----
25575
写该题掌握的两个函数sprintf()和strchr()
sprintf:该函数包含在stdio.h的头文件中,有三个参数,第一个参数是一个数组,第二个参数是格式说明,第三个之后的参数是变量,目的是将这些变量写到目标数组中
比如 char a[3] int x =229 ,那么sprintf(a,"%d",x),如果最后逐个输出数组得到229
strchr:包含在string.h的头文件中,有三个参数,前两个参数是必须写的,第一个参数是被搜索的数组,第二个参数是要搜索的字符,最后返回所找到位置的指针,如果没有找到就返回NULL
比如 strchr(s,'i')
所以本题应该尝试所有的abc和de然后判断是否满足题意
代码如下:
#include<stdio.h> #include<string.h> int main(void) { char stand[20]; char GE[101]; int count = 0; scanf("%s", stand); for (int i = 100; i < 1000; i++) { for (int j = 10; j < 100; j++) { int q = 1; int x = i * (j % 10); int y = i * (j / 10); int c = i * j; sprintf(GE, "%d%d%d%d%d", i, j, x, y, c); for (int k = 0; k < strlen(GE); k++) if (strchr(stand, GE[k]) == NULL) q = 0; if (q) { printf("<%d>\n", ++count); printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n", i, j, x, y, c); } } } printf("the number of solutions = %d", count); return 0; }