zoukankan      html  css  js  c++  java
  • [蓝桥杯2017初赛]9数算式

    题目描述

    观察如下的算式:9213 x 85674 = 789314562 
    左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。 
    而乘积恰好也是用到了1~9的所有数字,并且每个1次。 
    请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少个? 
    注意: 
    1. 总数目包含题目给出的那个示例。 
    2. 乘数和被乘数交换后作为同一方案来看待。 

    输出

    输出一个整数表示答案

    答案:1625

    题解:全排列之后,用for循环枚举乘数和被乘数,用map标记符合条件的组合

    #include<iostream>
    #include<string>
    #include<algorithm>
    #include<math.h>
    #include<string.h>
    #include<map>
    #include<stack>
    #include<queue>
    #define ll long long
    using namespace  std;
    int vis[10];
    map<ll,int>mp;
    int main()
    {
        int a[9]={1,2,3,4,5,6,7,8,9};
        int cnt=0;
        do
        {
            for(int i=1;i<9;i++)
            {
                ll ans,l=0,r=0,t=0,x=0,y=0;
                memset(vis,0,sizeof(vis));
                for(int j=0;j<=i;j++)
                    l=l*10+a[j];
                x=l;
                x=x*10;
                for(int k=i+1;k<9;k++)
                {
                    r=r*10+a[k];
                    x=x*10+a[k];
                }
                y=r;
                y=y*10;
                for(int j=0;j<=i;j++)
                    y=y*10+a[j];
                
                ans=l*r;
                ll ff=ans;
                while(ans)
                {
                    int temp=ans%10;
                    ans=ans/10;
                    if(vis[temp]==0&&temp!=0)
                    {
                        vis[temp]=1;
                        t++;
                    }
                }
                if(t==9&&mp.count(x)==0&&mp.count(y)==0)
                {
                    cnt++;
                    mp[x]=1;
                    mp[y]=1;
                    //cout<<l<<"   "<<r<<"    "<<ff<<endl;
                }
            }
        }while(next_permutation(a,a+9));
        cout<<cnt<<endl;
        return 0;
    }
  • 相关阅读:
    strcpy
    Apple Swift中英文开发资源集锦[apple swift resources]
    c/c++指针总结[pointer summary]
    TestPointer
    66. 有序数组构造二叉搜索树[array to binary search tree]
    HDU 2112 HDU Today
    HDU 3790 最短路径问题
    HDU 2544 最短路
    模拟赛 Problem 3 经营与开发(exploit.cpp/c/pas)
    模拟赛 Problem 2 不等数列(num.cpp/c/pas)
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12345705.html
Copyright © 2011-2022 走看看