由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
6 x 210 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,请输出剩余的满足要求的算式且按照第一个因数从小到大排列,第一个因数相等,按照第二个因数从小到大排列

 

解题思路:1.满足乘法交换律的算式只算为一种情况

     2.算得结果没有相同数字

     3.两个乘数和结果的数字相同

 

 

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

bool isSingle(char s[])
{
    for(int i = 0;i<4;i++)
        for(int j = i+1;j<4;j++)
            if(s[i] == s[j])
            {
                return false;
                break;
            }
    return true;
}

int main()
{
    int i,j,num;
    char s1[5],s2[8],s3[5];
    for(i=1;i<=999;i++)
    {
        for(j=1;j<=999;j++)
        {
            num = i*j;
            if(num>=1000&&num<10000&&i<j)
            {
                sprintf(s1,"%d",num);
                sort(s1,s1+4);
                if(isSingle(s1))
                {
                    sprintf(s2,"%d",i);
                    sprintf(s3,"%d",j);
                    strcat(s2,s3);
                    sort(s2,s2+4);
                    if(strcmp(s1,s2) == 0)
                    {
                        cout<<i<<"*"<<j<<" = "<<num<<endl;
                    }
                }
            }
        }
    }
}

 

版权声明:本文为ZZUGPY原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ZZUGPY/p/8471435.html