1. 程式人生 > 其它 >java A= B + 2C 是否有滿足規則的數字組合

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