java A= B + 2C 是否有满足规则的数字组合

题目描述:

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

第一行输出数组的元素个数。
接下来一行输出所有数组元素,用空格隔开。
输出描述:

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

数组长度在3-100之间。
数组成员为0-65535,数组成员可以重复,但每个成员只能在结果算式中使用一次。
如:数组成员为[0, 0, 1, 5],0出现2次是允许的,但结果0 = 0 + 2 * 0是不允许的,因为算式中使用了3个0。
用例保证每组数字里最多只有一组符合要求的解。
示例

输入:

4
2 7 3 0
输出:

7 3 2
说明

7 = 3 + 2 * 2
输入:

3
1 1 1
输出:

0
说明:

找不到满足条件的组合

 

import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()) {
            // 数组长度
            int length = sc.nextInt();
            int[] arr = new int[length];
            
            //数组赋值
            for(int i = 0; i < length; i++) {
                arr[i] = sc.nextInt();
            }
            
            //数组排序
//            sort(arr, 0, length -1);
            
            Arrays.sort(arr);  // 将数组升序排列
            int i;
            boolean end = false;
            for(i = 0; i < length-1; i++) {
                for(int j = 0; j < length-1; j++) {
                    if(j == i)
                        continue;
                    int sum = arr[i] + arr[j] * 2; // 以i=0,j=1为最小和,最小和如果大于数组中的最大值,说明不存在
                    if(sum > arr[length-1])
                        break;
                    int max = i > j ? i : j;  //比较i/j大小, 取大的值,因为和肯定在下标大的后面才能找到
                    for(int k = max + 1; k < length; k++) {
                        if(sum == arr[k]) {
                            System.out.println(arr[k] + " " + arr[i] + " " + arr[j]);
                            end = true;
                            break;
                        }
                    }
                    if(end)
                        break;
                }
                if(end)
                    break;
            }
            if(i == length -1) {
                System.out.println(0);
            }
        }
    }
}

 

posted @ 2022-04-04 17:04  海漠  阅读(538)  评论(0编辑  收藏  举报