古堡算式

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


思路:
ABCDE代表0~9之间的数字,其最大阈值为987654,目前还无法确定最小阈值。我们来确定下A的值,其值不可能为0,因为若为0的话,根据等式E也得为0。故初步可得ABCDE范围:10000~987654;
本题目的是要确定每个字母的值,那么我们要把每个字母分别分离出来,在遍历范围内得到每个字母的值,此处是本题的难点。
例如:a是一个3位数,那么:
百位:a/100;
十位:a%100/10;
个位:a%10;


结论:”%“(模)多少(几个0)就表示留多少位(从后往前数);“/”(商)多少(几个0)就表示删多少位(从后往前删)。
概括就是:几个0留几位,几个0删几位。(都是从后往前来)
比如b=2578, 那么
b%1000=578(从后往前数留三位);
b%100=78(从后往前数留两位);
b/1000=2(从后往前删3位);
b/100=25(从后往前删2位);
b/10=257(从后往前删1位);


然后建立模型,判断条件就是Y?=e*10000+d*1000+c*100+b*10+a;Y就是EDCBA的值;

package que21;

public class que21 {

    public static void main(String[] args) {
        //System.out.println("cuowu");
        // TODO Auto-generated method stub
        for(int i=10000;i<=98765;i++){
            int a=i/10000;//取最高位
            int b=i%10000/1000;//次之
            int c=i%1000/100;
            int d=i%100/10;
            int e=i%10;//取最低位
    if(a==b||a==c||a==d||a==e||b==c||b==d||b==e||c==d||c==e||d==e)
                continue;

        int edcba=e*10000+d*1000+c*100+b*10+a;//判断条件
        if(edcba%i==0)//如果Y能够整除i,就代表找到合适的i值、?值
            System.out.println(i+"*"+edcba/i+"="+edcba);

    }

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值