竖式问题

竖式问题。

找出所有形如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)返回的就是结束标记之前的字符个数。

 

posted @ 2019-01-29 08:50  芩溪儿  阅读(489)  评论(0编辑  收藏  举报