2012年第三届蓝桥杯C/C++程序设计本科B组省赛题目 古堡算式 结果填空

古堡算式
福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式:
ABCDE * ? = EDCBA
他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!”
华生:“我猜也是!”
于是,两人沉默了好久,还是没有算出合适的结果来。
请你利用计算机的优势,找到破解的答案。
把 ABCDE 所代表的数字写出来。
思路:循环遍历每个字母可能的情况。

答案:21978

我用的暴力,既然是结果天空,也不需要过多的优化(比如a小于5)就是简单的暴力,在判断字母不相同的时候,既可以用联结判定,也可以像我一样建立一个标记数组,开在全局省去初始化,用的时候标记为1,用完之后再放回去,标记成0。
另外,为了寻找多组值,我先输出变量sum(注释掉了)发现只有一种符合要求的组合;
上代码

#include<iostream>
using namespace std;
int book[10];
int main(){
    int a,b,c,d,e,k,sum = 0;;
    for(a = 1;a <= 9;a++){
        book[a] = 1;
        for(b = 1;b <= 9;b++){
            if(book[b] != 0)
                continue;
            book[b] = 1;
            for(c = 1;c <= 9;c++){
                if(book[c] != 0)
                    continue;
                book[c] = 1;
                for(d = 1;d <= 9;d++){
                    if(book[d] != 0)
                        continue;
                    book[d] = 1;
                    for(e = 1;e <= 9;e++){
                        if(book[e] != 0)
                            continue;
                        book[e] = 1;
                        for(k = 1;k <= 9;k++){
                            if(k*(10000*a+1000*b+100*c+10*d+e) == 10000*e+1000*d+100*c+10*b+a)
                                //sum++;
                                cout << a << b << c << d << e << endl;
                        }
                        book[e] = 0;
                    }
                    book[d] = 0;
                }
                book[c] = 0;
            }
            book[b] = 0;
        }
        book[a] = 0;
    }
    //cout << sum << endl;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值