例3-3 竖式问题
问题描述:找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点)。
样例输入:2357
样例输出
<1>
..775
X..33
-----
.2325
2325.
-----
25575
代码如下:
1 #include <stdio.h> 2 #include <string.h> 3 4 5 int main(void) 6 { 7 int i, ok, abc, de, x, y, z, count = 0; 8 char s[20], buf[99]; 9 10 scanf("%s", s); 11 for (abc = 111; abc <= 999; abc++) 12 { 13 for (de = 11; de <= 99; de++) 14 { 15 x = abc * (de % 10); 16 y = abc * (de / 10); 17 z = abc * de; 18 sprintf(buf, "%d%d%d%d%d", abc, de, x, y , z); 19 ok = 1; 20 for (i = 0; i < strlen(buf); i++) 21 { 22 if (strchr(s, buf[i]) == NULL) 23 { 24 ok = 0; 25 } 26 } 27 if (ok) 28 { 29 printf("<%d>\n", ++count); 30 printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n", abc, de, x, y, z); 31 } 32 } 33 } 34 printf("The number of solution = %d\n", count); 35 return 0; 36 }
浙公网安备 33010602011771号