假设我们有一个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