蓝桥杯 神奇算式
由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; } } } } } }