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

C++でarr[i]>=arr[j]である配列のすべてのペアの最大モジュロ


この問題では、n個の要素からなる配列が与えられます。私たちのタスクは、arr [i]> =arr[j]である配列のすべてのペアの最大モジュロを見つけるプログラムを作成することです。

ここで、arr [i]%arr [j]の最大値を見つける必要があります。ここで、arr [i]> =arr[j]です。

問題を理解するために例を見てみましょう

入力 − arr [] ={3、5、9}

出力 − 4

説明

All possible Pairs arr[i] and arr[j],
5, 3 => 5%3 = 2
9, 3 => 9%3 = 0
9, 5 => 9%5 = 4

この問題を解決するために、単純で直接的なアプローチで2つのネストされたループを実行し、可能なすべてのペアのモジュロを見つけます。次に、それらの最大値を見つけます。ただし、このソリューションは複雑さがO(n ^ 2)のオーダーになるため、効率的ではありません。

効果的なアプローチは、ソートされた配列に適用されます。アルゴリズムは次のように適用されます-

配列内のすべての要素arr[j]について、配列の最大要素よりも大きい値が見つかるまで、ar[j]の倍数である値を見つけます。次に、arr[i]

このソリューションを使用して、アルゴリズムの機能を示す例を解いてみましょう-

arr = {3, 5, 9}
arr[j] = 3 for j = 0,
x = {6, 9}
For x = 6, arr[i] = 5,
arr[i]%arr[j] = 6%5 = 2, maxModulo = 2
For x = 9, arr[i] = 9,
arr[i]%arr[j] = 9%3 = 0, maxModulo = 2
arr[j] = 5 for j = 1,
x = {10}
For x = 10, arr[i] = 9,
arr[i]%arr[j] = 9%5 = 4, maxModulo =4

arr [i]> =arr [j] −である配列のすべてのペアの最大モジュロを見つけるプログラム

#include <bits/stdc++.h>
using namespace std;
int maxModulo(int arr[], int n) {
   int maxModulo = 0;
   sort(arr, arr + n);
   for (int j = n - 2; j >= 0; --j) {
      if (maxModulo >= arr[j])
         break;
      if (arr[j] == arr[j + 1])
         continue;
      for (int k = 2 * arr[j]; k <= arr[n - 1] + arr[j]; k += arr[j]) {
         int i = lower_bound(arr, arr + n, k) - arr;
         maxModulo = max(maxModulo, arr[i - 1] % arr[j]);
      }
   }
   return maxModulo;
}
int main() {
   int arr[] = {3, 5, 9};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum modulo of all pairs is "<<maxModulo(arr, n);
}
です。

出力

The maximum modulo of all pairs is 4

  1. C++で等比数列を形成するソートされた配列内のすべてのトリプレットを検索します

    明確な正の整数を持つソートされた配列があるとします。積分共通比で等比数列を形成するすべてのトリプレットを見つける必要があります。配列要素が[1、2、6、10、18、54]、トリプレットが(2、6、18)、および(6、18、54)であるとすると、これらは等比数列を形成しています。 これを解決するために、2番目の要素から開始し、すべての要素を中間要素として固定し、小さい要素と大きい要素を検索します。中間要素arr[j]が等比数列の中間である場合、前の要素arr[i]とarr[k]は次のようになります $$ \ frac {arr [j]} {arr [i]} =\ frac {arr [k]}

  2. C ++でa%b =kとなるような配列内のすべてのペア(a、b)を検索します

    配列Aがあるとすると、その配列から、a%b =kとなるようにすべてのペア(a、b)を取得する必要があります。配列がA=[2、3、4、5、7]、k =3であるとすると、ペアは(7、4)、(3、4)、(3、5)、(3、7)になります。 これを解決するために、リストをトラバースして、指定された条件が満たされているかどうかを確認します。 例 #include <iostream> using namespace std; bool displayPairs(int arr[], int n, int k) {    bool pairAvilable = true;