C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++で繰り返し減算してすべての要素を同じにした後、最大配列合計を見つけます


n個の要素の配列があるとします。すべての要素が同じになるように、すべての要素の可能な最大合計を見つけます。許可される操作は、任意の2つの要素を選択し、それらの大きい方を2つの絶対差で置き換えることだけです。要素が[9、12、3、6]のようなものだとします。その場合、出力は12になります。したがって、最初にA[1]をA[1] – A [3] =12 – 6 =6に置き換えます。したがって、要素は[9、6、3、6]になり、次にA[を置き換えます。 3] with 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]です。したがって、2つの数値を取得し、大きい方の値をそれらの絶対差で置き換えます。次に、すべてが同じになるまでこれらの手順を繰り返します。

#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

  1. C ++を使用して、マトリックス内の合計が最大の列を検索します。

    サイズがMxNの行列があるとします。合計が最大の列を見つける必要があります。このプログラムでは、トリッキーなアプローチには従わず、配列を列ごとにトラバースし、各列の合計を取得します。合計が最大の場合は、合計と列インデックスを出力します。 例 #include<iostream> #define M 5 #define N 5 using namespace std; int colSum(int colIndex, int mat[M][N]){    int sum = 0;    for(int i = 0; i<M; i++){

  2. C++の配列で最大GCDのペアを検索します

    正の整数の配列があるとします。私たちのタスクは、GCD値が最大である配列から整数のペアを見つけることです。 A ={1、2、3、4、5}とすると、出力は2になります。ペア(2、4)にはGCD 2があり、他のGCD値は2未満です。 この問題を解決するために、各要素の除数の数を格納するためのカウント配列を維持します。除数を数えるプロセスには、O(sqrt(arr [i]))の時間がかかります。全体をトラバースした後、最後のインデックスから最初のインデックスまでカウント配列をトラバースできます。要素が1より大きい値が見つかった場合、これは2つの要素の約数であり、最大GCDでもあることを意味します。