在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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP