蓝桥杯 猜算式

看下面的算式:

□□ x □□ = □□ x □□□

它表示:两个两位数相乘等于一个两位数乘以一个三位数。
如果没有限定条件,这样的例子很多。
但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。
该算式中1至9的每个数字出现且只出现一次!
比如:
46 x 79 = 23 x 158
54 x 69 = 27 x 138
54 x 93 = 27 x 186
.....

请编程,输出所有可能的情况!

#include <iostream>
using namespace std;
int vis[1000]= {0};


int main()
{
    for(int a1=1; a1<=9; a1++)
        for(int a2=1; a2<=9; a2++)
            for(int b1=1; b1<=9; b1++)
                for(int b2=1; b2<=9; b2++)
                    for(int c1=1; c1<=9; c1++)
                        for(int c2=1; c2<=9; c2++)
                            for(int d1=1; d1<=9; d1++)
                                for(int d2=1; d2<=9; d2++)
                                    for(int d3=1; d3<=9; d3++)
                                    {
                                        if(a1!=a2&&a1!=b1&&a1!=b2&&a1!=c1&&a1!=c2&&a1!=d1&&a1!=d2&&a1!=d3)
                                            if(a2!=b1&&a2!=b2&&a2!=c1&&a2!=c2&&a2!=d1&&a2!=d2&&a2!=d3)
                                                if(b1!=b2&&b1!=c1&&b1!=c2&&b1!=d1&&b1!=d2&&b1!=d3)
                                                    if(b2!=c1&&b2!=c2&&b2!=d1&&b2!=d2&&b2!=d3)
                                                        if(c1!=c2&&c1!=d1&&c1!=d2&&c1!=d3)
                                                            if(c2!=d1&&c2!=d2&&c2!=d3&&d1!=d2&&d1!=d3&&d2!=d3)
                                                            {
                                                                int a=10*a1+a2;
                                                                int b=10*b1+b2;
                                                                int c=10*c1+c2;
                                                                int d=100*d1+10*d2+d3;
                                                                if(vis[a]==0||vis[b]==0||vis[c]==0||vis[d]==0)
                                                                    if(a*b==c*d)
                                                                    {
                                                                        vis[a]=1;
                                                                        vis[b]=1;
                                                                        vis[c]=1;
                                                                        vis[d]=1;
                                                                        cout<<a<<" * "<<b<<" = "<<c<<" * "<<d<<endl;
                                                                    }
                                                            }


                                    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值