1066-竖式问题

题目描述
找出所有形如 abc∗de (三位数乘以两位数)的算式,使得在完整的竖式中,所有数字都属于一个特定的数字集合。输入数字集合(相邻数字之间没有空格),输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。具体格式见样例输出。
输入
输入包含多组测试用例。
对于每组测试用例,输入一个字符串s,代表数字集合。
输出
输出所有竖式。每个竖式前应有编号,之后应有一个空行。最后输出解的总数。(竖式按照3位数的大小从小到大输出~)
样例输入
2357
样例输出

<1>
  775
X  33
-----
 2325
2325
-----
25575

The number of solutions: 1

题解代码如下

#include<bits/stdc++.h>
using namespace std;
char s[20];             ///存储字符串
bool st[10];            ///标记访问数组
bool judge(int x){
    while(x){
        if(!st[x%10]) return false;
        x /= 10;
    }
    return true;
}
int main(){
    while(scanf("%s",s) != EOF){
        memset(st,0,sizeof st);
        int len = strlen(s),id = 0;
        for(int i=0;i<len;i++) st[s[i] - '0'] = 1; ///将所有数
        
        for(int x = 100;x <= 999;x ++){             ///枚举三位数
            for(int y = 10;y <= 99;y ++){           ///枚举两位数
                int tmp1 = x * (y%10);              ///三位数乘以两位数的个位
                int tmp2 = x * (y/10);              ///三位数乘以两位数的十位
                int tmp3 = x * y;                   ///存储结果
                if(judge(x)&&judge(y)&&judge(tmp1)&&judge(tmp2)&&judge(tmp3)){
                    printf("<%d>\n",++id);
                    printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n",x,y,tmp1,tmp2,tmp3);
                }
            }
        }
        printf("The number of solutions: %d\n",1);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值