竖式问题 C语言

题目:
找出所有形如abc*de(三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出(为了便于观察,竖式中的空格改用小数点显示,但你的程序应该输出空格,而非小数点)。

我刚开始看不懂这个题目,所以上论坛搜了一下,下面这个人的回答还是很清楚的,我把截图贴出来。如果不理解题目的同学可以看一下。
ps:我这也算是标注转载的出处了吧…
这里写图片描述
这里写图片描述

下面是代码:
代码中有三个我以前没遇见的函数,我要解释一下,

1. sprintf(),是将输出的内容,输出到字符串中。
2. strlen(),计算字符串的长度。
3. strchr(a,b),要在a这个字符串中,查找b字符,如果找到了,就返回该字符所在的地址,如果没有则为NULL。
了解了这三个函数,那么下面的代码理解起来就简单多了。。。

#include <stdio.h>
#include <string.h>

int main()
{
    int count = 0;
    char s[20], buf[99];
    scanf("%s",s);

    int abc = 0;
    int de = 0;
    for(abc = 111; abc < 999; abc++)
        for(de = 11; de < 99; de++)
    {
        int x = 0;
        int y = 0;
        int z = 0;
        x = abc * (de % 10);
        y = abc * (de / 10);
        z = abc * de;
        sprintf(buf,"%d%d%d%d",abc,de,x,y,z);
        int ok = 1;
        int i;
        for(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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值