古堡算式--蓝桥杯
欢迎访问我的新博客:http://www.milkcu.com/blog/
原文地址:http://www.milkcu.com/blog/archives/1366851360.html
简述
这是2012年蓝桥杯全国软件设计大预赛第2题,问题是求出字母对应的数字。
推荐链接:《2012蓝桥杯软件大赛预赛题目汇总》
题目描述
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
答案写在“解答.txt”中,不要写在这里!
分析
这种类型的题目最简单最直接的方法就是穷举法吧,虽然时间复杂度较大,但是在对性能没要求且基数不是特别大的情况下,肯定能得到答案。
源代码
# include <stdio.h> int main(void){ int a, b, c, d, e; int x; int left, right; left = a * 10000 + b * 1000 + c * 100 + d * 10 + e * 1; right = e * 10000 + d * 1000 + c * 100 + b * 10 + a * 1; for(a = 0; a <= 9; a++){ for(b = 0; b <= 9; b++){ for(c = 0; c <= 9; c++){ for(d = 0; d <= 9; d++){ for(e = 0; e <= 9; e++){ for(x = 0; x <= 9; x++){ left = a * 10000 + b * 1000 + c * 100 + d * 10 + e * 1; right = e * 10000 + d * 1000 + c * 100 + b * 10 + a * 1; if(left * x == right && a !=b && b != c && c != d && d != a && a != c && b != d){ printf("%d %d %d %d %d\n", a, b, c, d, e); } } } } } } } printf("\nDone\n"); return 0; }
最后答案
ABCDE 所代表的数字为
1 0 9 8 9
2 1 9 7 8
更新
原代码存在错误,已更新。
# include <stdio.h> int main(void){ int a, b, c, d, e; int x; int left, right; left = a * 10000 + b * 1000 + c * 100 + d * 10 + e * 1; right = e * 10000 + d * 1000 + c * 100 + b * 10 + a * 1; for(a = 0; a <= 9; a++){ for(b = 0; b <= 9; b++){ if(a == b) { continue; } for(c = 0; c <= 9; c++){ if(c == a || c == b) { continue; } for(d = 0; d <= 9; d++){ if(d == a || d == b || d == c) { continue; } for(e = 0; e <= 9; e++){ if(e == a || e == b || e == c || e == d) { continue; } for(x = 0; x <= 9; x++){ left = a * 10000 + b * 1000 + c * 100 + d * 10 + e * 1; right = e * 10000 + d * 1000 + c * 100 + b * 10 + a * 1; if(left * x == right){ printf("%d %d %d %d %d\n", a, b, c, d, e); } } } } } } } return 0; }
(全文完)