7、检查是否存在满足条件的数字组合——华子机试必知必会

146 阅读1分钟

题目描述

给定一个正整数数组 检查数组中是否存在满足规则的数组组合 规则:A=B+2C

输入描述

第一行输入数组的元素个数 接下来一行输入所有数组元素 用空格隔开

输出描述

如果存在满足要求的数 在同一行里依次输出 规则里 A/B/C的取值 用空格隔开 如果不存在输出0

示例一

输入:

4
2 7 3 0

输出:

7 3 2

说明:

7=3+2*2

示例二

输入:

3
1 1 1

输出:

0

说明:

找不到满足条件的组合

备注:数组长度在3 ~ 100之间 数组成员为 0~65535 数组成员可以重复

但每个成员只能在结果算式中使用一次

如:

数组成员为 [0,0,1,5] 0出现两次允许,但结果0=0+2*0不允许

因为算式中使用了3个0 用例保证每组数字里最多只有一组符合要求的解

题解

 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数组的元素个数:");
        scanner.nextLine();
        System.out.println("请输入所有数组元素:");
        String input = scanner.nextLine().replaceAll(" ","");
        String result = checkCombination(input);
        System.out.println(result);
    }
    /**
     * 检查是否存在满足条件的数字组合
     * @param input
     * @return
     */
    private static String checkCombination(String input){
        StringBuilder sb = new StringBuilder();
        char[] chars = input.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            int A = chars[i] - '0';
            for (int j = 0; j < chars.length; j++) {
                int B = chars[j] - '0';
                for (int k = 0; k < chars.length; k++) {
                    int C = chars[k] - '0';
                    if (i!=j&&j!=k&& (A==(B+2*C))){
                        sb.append(A).append(" ").append(B).append(" ").append(C);
                        return sb.toString();
                    }
                }
            }
        }
        return "0";
    }