3-3竖式问题

题目:

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

样例输入:2357

样例输出:

<1>

..775

X..33


.2325

2325.


25575

The number of solutions = 1

**分析:
string中 find()的应用  (rfind() 类似,只是从反向查找)
尝试所有的abc和de,判断是否满足条件。
找到 – 返回 第一个字符的索引

     没找到–返回   string::npos
**

#include<iostream>
#include<string>
#include<sstream>//用于stringstream转换
using namespace std;
bool conform(int num, string str){
    stringstream stream;
    string s;
    stream << num;
    stream >> s;
    int len = s.length();
    for(int i = 0; i < len; i++){
        if(str.find(s[i]) == str.npos){
            return 0;
        }
    }
    return 1;
}
int main (){
    string str;
    cin >> str;
    int abc;
    int de;
    int count = 0;
    for(abc = 111; abc < 999; abc++){
        for(de = 11; de < 99; de++){
            if( conform( abc, str) && conform( de, str)){
                int x = abc * (de/10);
                int y = abc * (de%10);
                if( conform( x, str) && conform( y, str)){
                    int outcome = abc *de;
                    if( conform( outcome, str)){
                        cout << "<" << ++count << ">" << endl;
                        cout.width(5);
                        cout.setf(ios::right);
                        cout << abc << endl;
                        cout << "X";
                        cout.width(4);
                        cout.setf(ios::right);
                        cout  << de << endl;
                        cout << "-----" << endl;
                        cout.width(5);
                        cout.setf(ios::right);
                        cout << x << endl;
                        cout.width(4);
                        cout.setf(ios::right);
                        cout << y << endl;
                        cout << "-----" << endl;
                        cout.width(5);
                        cout.setf(ios::right);
                        cout << outcome << endl;
                    }
                }
            }
        }
    } cout << endl;
        cout << "The number of solutions = " << count << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值