竖式问题

找出所有形如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;
}

 

上一篇:C语言中sprintf()函数的用法


下一篇:怎么样连接两个char*型的字符串变量,