题目:神奇算式
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。
比如:
210 x 6 = 1260
8 x 473 = 3784
27 x 81 = 2187
都符合要求。
如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
请填写该数字,通过浏览器提交答案,不要填写多余内容(例如:列出所有算式)。
答案:12
C++代码一:
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int v[5], i;
for(i = 1023; i <= 9876; i++ ){
v[0] = i/1000;
v[1] = i/10%10;
v[2] = i/100%10;
v[3] = i%10;
int flag1 = 0, flag2 = 0; // 满足乘法交换律的算式算作一种,需要做个标记
if(v[0] != v[1] && v[0] != v[2] && v[0] != v[3] && v[1] !=v[2] && v[1] != v[3] && v[2] != v[3]){
do{
if(flag1 != 3 && (v[0]*100+v[1]*10+v[2])*v[3] == i){
cout << v[0] << v[1] << v[2] << " x " << v[3] << " = " << i <<endl;
flag1 = 1;
}
else if(flag2 != 2 && (v[0]*10+v[1])*(v[2]*10+v[3]) == i){
cout << v[0] << v[1] << " x " << v[2] << v[3] << " = " << i <<endl;
flag2 = 2;
}
else if(flag1 != 1 && v[0]*(v[1]*100+v[2]*10+v[3]) == i){
cout << v[0] << " x " << v[1] << v[2] << v[3] << " = " << i <<endl;
flag1 = 3;
}
}while(next_permutation(v,v+4));
}
}
return 0;
}
C++代码二:
#include <iostream>
using namespace std;
bool isOk(int result, int t1, int t2) {
bool flag1[10] = {0}, flag2[10] = {0};
int i, rNum[4], num[4];
for(i = 0; i < 4; i++) { // 判断结果可有重复的数字
rNum[i] = result%10;
result /= 10;
if(flag1[rNum[i]])
return false;
flag1[rNum[i]] = true;
}
i = 0;
while(t1 > 0) {
num[i] = t1%10;
t1 /= 10;
if(flag2[num[i]])
return false;
flag2[num[i]] = true;
i++;
}
while(t2 > 0) {
num[i] = t2%10;
t2 /= 10;
if(flag2[num[i]])
return false;
flag2[num[i]] = true;
i++;
}
if(i != 4)
return false;
for(i = 0; i < 10; i++)
if(flag1[i] != flag2[i])
return false;
return true;
}
int main() {
int i, j, count = 0;
for(i = 1000; i < 10000; i++) {
//if(i == 1260 || i == 3784 || i == 2187) // 排除题目给出的三种情况
// continue;
for(j = 1; j*j <= i; j++)
if(!(i%j) && isOk(i, j, i/j)) {
cout << j << " x " << i/j << " = " << i << endl;
count++;
}
}
cout << "总共有 " << count << " 种结果" << endl;
return 0;
}