蓝桥杯---神奇算式

来源:互联网 发布:算法问题实战策略好吗 编辑:程序博客网 时间:2024/05/14 22:51

Description

由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。

比如:

6 x 210 = 1260
8 x 473 = 3784
27 x 81 = 2187

都符合要求。

如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,请输出剩余的满足要求的算式且按照第一个因数从小到大排列,第一个因数相等,按照第二个因数从小到大排列

Input

Output

6 x 210 = 1260
8 x 473 = 3784
27 x 81 = 2187

分析:注意看清楚题,题上的一些数式不输出,我已经wrong了很多次,才过去,注意输出的乘号和空格的问题,乘号是小写的x而不是*,这次得长记性啦哭

#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>#include<string>using namespace std;int a[10],b[10];int count1,count2;bool zhuanhua(int a[],int b[]){    int flag=1;    sort(a,a+count1);    sort(b,b+count2);    for(int i=0;i<count2;i++)    {        if(a[i]==a[i+1])           {              for(int j=i;j<count2;j++)                {                    a[j]=a[j+1];                    i--;                    count2--;                }           }    }    if(count1!=count2)        return false;    for(int i=0;i<count1;i++)    {        if(a[i]!=b[i])        {            flag=0;        }    }    if(flag)       {            return true;       }    else       return false;}int main(){    int sum;   for(int i=1;i<10;i++)   {       for(int j=100;j<=999;j++)       {            sum=i*j;             count1=0;             count2=0;        if(sum<1000||sum>9999||sum==1260||sum==3784)        {            continue;        }            a[count1++]=i%10;            a[count1++]=j%10;            a[count1++]=j/10%10;            a[count1++]=j/100;            b[count2++]=sum%10;            b[count2++]=sum/10%10;            b[count2++]=sum/100%10;            b[count2++]=sum/1000;           if(count1!=count2&&count2!=4)                continue;                if(zhuanhua(a,b))                    printf("%d x %d = %d\n",i,j,sum);        }   }        for(int i=10;i<100;i++)        {            for(int j=i;j<=100;j++)            {                count1=0;count2=0;                sum=i*j;                if(sum<1000|sum>9999||sum==2187)                    continue;                     a[count1++]=i%10;                     a[count1++]=i/10;                     a[count1++]=j%10;                     a[count1++]=j/10;                     b[count2++]=sum%10;                     b[count2++]=sum/10%10;                     b[count2++]=sum/100%10;                     b[count2++]=sum/1000;                    if(count1!=count2&&count2!=4)                       continue;                if(zhuanhua(a,b))                    printf("%d x %d = %d\n",i,j,sum);            }        }   return 0;}


0 0
原创粉丝点击