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); } } } }