竖式问题
作者:互联网
竖式问题。
找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中, 所有数字都属于一个特定的数字集合。
输入数字集合(相邻数字之间没有空格),输出所有 竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。
具体格式见样例输出 (为了便于观察,竖式中的空格改用小数点显示,但所写程序中应该输出空格,而非小数 点)。
样例输入:
2357
样例输出:
<1>
..775
X..33
-----
.2325
2325.
-----
25575
The number of solutions = 1
#include<stdio.h> #include<string.h> int main() { int count = 0; char s[20], buf[99]; scanf("%s", s); for(int abc = 111; abc <= 999; abc++) for(int de = 11; de <= 99; de++) { int x = abc*(de%10), y = abc*(de/10), z = abc*de; sprintf(buf, "%d%d%d%d%d", abc, de, x, y, z); int ok = 1; for(int i = 0; i < strlen(buf); i++) if(strchr(s, buf[i]) == NULL) ok = 0; if(ok) { printf("<%d>\n", ++count); printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n", abc, de, x, y, z); } } printf("The number of solutions = %d\n", count); return 0; }
字符是一种特殊的整数
每一个字符都有一个整数编码,称为ASCII码。为了方便书写,C语言 允许用直接的方法表示字符,例如,“a”代表的就是a的ASCII码。
不过,有一些字符直接表 示出来并不方便,例如,回车符是“\n”,而空字符是“\0”,它也是C语言中字符串的结束标 志。
其他例子包括“\\”(注意必须有两个反斜线)、“\'”(这个是单引号),甚至还有的字符 有两种写法:“\"”和“"”都表示双引号。
有两个问题:判断和输出。通常,先考虑输出,因为它比较简单。每个竖式需要打印7行,但不一定要用7条printf语句,1条就行。
注:%5d表示按照5位数打印,不足5位在前面补空格
用法:
sprintf和strchr:strchr的作用是在一个字符串中查找单个字符。
sprintf:之前用过printf和fprintf。printf输出到屏幕,fprintf输出到文件,而sprintf输出到字符串。多数情况下,屏幕总是可以输出的,文件一般也能写(除非 磁盘满或者硬件损坏),但字符串就不一定了:应该保证写入的字符串有足够的空间。
多大才算足够大呢?字符个数加1,因为C语言的字符串是以空字符“\0”结尾的。
strlen(s)返回的就是结束标记之前的字符个数。
标签:输出,字符,竖式,问题,printf,字符串,5d 来源: https://www.cnblogs.com/LOW-ctfer/p/10332532.html