[蓝桥杯] 马虎的算式
小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。
有一次,老师出的题目是:36 x 495 = ?
他却给抄成了:396 x 45 = ?
但结果却很戏剧性,他的答案竟然是对的!!
因为 36 * 495 = 396 * 45 = 17820
类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54
假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)
能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?
请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。
满足乘法交换律的算式计为不同的种类,所以答案肯定是个偶数。
【题解】
没啥好说的,直接暴力,枚举所有情况。
【代码 C++】
1 #include<cstdio> 2 #include<cstring> 3 bool w[15]; 4 int main(){ 5 int s=0, a, b, c, d, e, now,temp; 6 for (now = 11111; now < 99999; ++now){ 7 memset(w, 0, sizeof(w)); 8 temp = now; 9 a = temp % 10, temp /= 10; 10 if (a == 0 || w[a]) continue; 11 w[a] = 1; 12 13 b = temp % 10, temp /= 10; 14 if (b == 0 || w[b]) continue; 15 w[b] = 1; 16 17 c = temp % 10, temp /= 10; 18 if (c == 0 || w[c]) continue; 19 w[c] = 1; 20 21 d = temp % 10, temp /= 10; 22 if (d == 0 || w[d]) continue; 23 w[d] = 1; 24 25 e = temp % 10, temp /= 10; 26 if (e == 0 || w[e]) continue; 27 w[e] = 1; 28 29 if ((a * 10 + b)*(c * 100 + d * 10 + e) == (a * 100 + d * 10 + b)*(c * 10 + e)) ++s; 30 } 31 printf("%d", s); 32 return 0; 33 }
【最终结果】
142