第六届蓝桥杯真题JAVA B组-三样献瑞

【题目】

三羊献瑞

观察下面的加法算式:
在这里插入图片描述
其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

【思路】

将0-9整数放入数组中,进行全排列,获取前8位进行逻辑判断,是否符合“三样献瑞”规则
全排列 > 逻辑判断 > 符合“三样献瑞”规则

/**
 *     祥 瑞 生 辉
 * +   三 羊 献 瑞
 * -------------------
 *     三 羊 生 瑞 气
 *
 *     a b c d
 * +   e f g b
 * -------------------
 *   e f c b h
 *
 * 数组前8位:a b c d e f g b
 * 结果:     e f c b h
 */
public class Demo3_三羊献瑞 {

    // 前面8位表示 (祥 瑞 生 辉 + 三 羊 献 瑞) 这8个字
    private static int[] arr  = new int[]{1, 0, 2, 3, 4, 5, 6, 7, 8, 9};

    public static void main(String[] args) {
        f(0);
    }

    private static void f(int p) {
        // 每完成一次全排列进行逻辑判断
        if (p == arr.length - 1) {
            if (arr[0] != 0 && arr[4] != 0) {
                // 祥 瑞 生 辉
                int a = arr[0] * 1000 + arr[1] * 100 + arr[2] * 10 + arr[3];
                // 三 羊 献 瑞
                int b = arr[4] * 1000 + arr[5] * 100 + arr[6] * 10 + arr[1];
                // 三 羊 生 瑞 气
                int c = arr[4] * 10000 + arr[5] * 1000 + arr[2] * 100 + arr[1] * 10 + arr[8];
                if (a + b == c) {
                    System.out.println(a + " + " + b + " = " + c);
                }
            }
            return;
        }

        // 进行全排列(遇到全排列的题都按以下这个模板写)
        for (int i = p; i < arr.length; i++) {
            swap(i, p);
            f(1 + p);
            swap(i, p);
        }
    }

    // 进行元素交换
    private static void swap(int n, int m) {
        int t = arr[n];
        arr[n] = arr[m];
        arr[m] = t;
    }
}

最后输出:9567 + 1085 = 10652,答案为:1085

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值