九数算式(蓝桥杯)

该博客探讨了一个计算问题,即找到所有使用1到9的数字组成乘数和被乘数,使得乘积也由这9个数字组成且每个数字出现一次。通过全排列算法,代码实现了查找满足条件的组合数量,最终得出答案为1625种。

如题:

观察如下的算式
9213 x 85674 = 789314562
左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。
而乘积恰好也是用到了1~9的所有数字,并且每个1次。
请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少个?

注意:

  1. 总数目包含题目给出的那个示例。
  2. 乘数和被乘数交换后作为同一方案来看待。
#include<bits/stdc++.h>
using namespace std;
int bei[10];//备用
map<long long,int>mp;//
int main()
{
    int a[9]={1,2,3,4,5,6,7,8,9};
    int res=0;
    do
    {
        for(int i=1;i<9;i++)
        {
            memset(bei,0,sizeof(bei));//分配空间
            long long int ans,left=0,right=0,t=0,x=0,y=0;
            for(int j=0;j<=i;j++)
            {
                left=left*10+a[j];
            }
            x=left;
            x=x*10;
            for(int k=i+1;k<9;k++)
            {
                right=right*10+a[k];
                x=x*10+a[k];
            }
            y=right;
            y=y*10;
            for(int j=0;j<=i;j++)
                y=y*10+a[j];
            
            ans=left*right;
            long long int ff=ans;
            while(ans>0)
            {
                int x=ans%10;
                ans=ans/10;
                if(bei[x]==0&&x!=0)
                {
                    bei[x]=1;
                    t++;
                }
            }
            if(t==9&&mp.count(x)==0&&mp.count(y)==0)
            {
                res++;
                mp[x]=1;
                mp[y]=1;
            }
        }
    }while(next_permutation(a,a+9));//全排列
    cout<<res<<endl;
    return 0;
}

在这里插入图片描述
答案:1625

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值