java A= B + 2C 是否有滿足規則的數字組合
阿新 • • 發佈:2022-04-04
題目描述:
給定一個正整數陣列,檢查陣列中是否存在滿足規則的數字組合
規則: 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); } } } }