凑算式(全排列)

211 阅读1分钟

题目

image.png

这个算式中AI代表19的数字,不同的字母代表不同的数字。

比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。

这个算式一共有多少种解法?

注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

代码


    public static int res;

    public static boolean check(int[] arr) {
        int A = arr[0];
        int B = arr[1];
        int C = arr[2];
        int D = arr[3] * 100 + arr[4] * 10 + arr[5];
        int E = arr[6] * 100 + arr[7] * 10 + arr[8];
        // A + B/C + D/E == 10
        if(B*E + C*D == (10 - A) * C * E) {
            return true;
        }
        return false;
    }

    public static void f(int[] arr, int k) {

        if (k >= arr.length) {
            if (check(arr)) {
                res += 1;
            }
            return;
        }

        for (int i = k; i < arr.length; i++) {
            int t = arr[k];
            arr[k] = arr[i];
            arr[i] = t;
            f(arr, k + 1);
            t = arr[k];
            arr[k] = arr[i];
            arr[i] = t;
        }

    }

    public static void main(String[] args) {
        f(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, 0);
        System.out.println(res); 
    }
}

输出

29