在C++中透過重複減法使所有元素相同後查詢最大陣列和


假設我們有一個包含n個元素的陣列。找到所有元素都相同時的最大可能元素和。唯一允許的操作是選擇任意兩個元素,並將其中較大的元素替換為兩者的絕對差。例如,元素為[9, 12, 3, 6]。那麼輸出將為12。首先將A[1]替換為A[1] – A[3] = 12 – 6 = 6。所以現在元素為[9, 6, 3, 6],然後將A[3]替換為A[3] – A[2] = 6 – 3 = 3。所以元素為[9, 6, 3, 3]。然後將A[0]替換為A[0] – A[1] = 9 – 6 = 3。所以元素為[3, 6, 3, 3]。最後將A[1]替換為A[1] – A[3] = 6 – 3 = 3。所以元素為[3, 3, 3, 3]。所以所有元素都相同。和為12。

如果我們分析這個操作,它將是A[i] = A[i] – A[j],其中A[i] > A[j]。所以我們將取兩個數字,然後用它們的絕對差替換較大的值。然後重複這些步驟,直到所有元素都相同。

示例

線上演示

#include<iostream>
#include<algorithm>
using namespace std;
int findSameElement(int arr[], int n) {
   int gcd_val = arr[0];
   for (int i = 1; i < n; i++)
   gcd_val = __gcd(arr[i], gcd_val);
   return gcd_val;
}
int getMaxSum(int arr[], int n) {
   int value = findSameElement(arr, n);
   return (value * n);
}
int main() {
   int arr[] = {3, 9, 6, 6};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "The maximum sum is: " << getMaxSum(arr, n);
}

輸出

The maximum sum is: 12

更新於:2019年12月18日

122 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.