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

C++でa+b =c + dとなるような配列で、4つの要素a、b、c、dを見つけます。


整数のリストがあるとします。私たちのタスクは、a + b =c + dとなるように、(a、b)と(c、d)のような2つのペアとして4つの異なる整数を見つけることです。複数の回答がある場合は、1つだけ印刷してください。配列要素が次のようであると仮定します:A =[7、5、9、3、6、4、2]の場合、ペアは(7、3)と(6、4)になります

ここでは、ハッシュ手法を使用します。合計をキーとして使用し、ペアとしてハッシュテーブルの値として使用します。この問題を解決するには、次の手順に従う必要があります。

  • 0からn– 1の範囲のiについては、
    • i +1からn– 1の範囲のjの場合、do
      • 合計を見つける
      • ハッシュテーブルにすでに合計がある場合は、前のペアと現在のペアを出力します
      • それ以外の場合は、ハッシュテーブルを更新します。

#include<iostream>
#include<map>
using namespace std;
bool getTwoPairs(int arr[], int n) {
   map<int, pair<int, int> > hash_table;
   for (int i = 0; i < n; ++i) {
      for (int j = i + 1; j < n; ++j) {
         int sum = arr[i] + arr[j];
         if (hash_table.find(sum) == hash_table.end())
            hash_table[sum] = make_pair(i, j);
         else {
            pair<int, int> pp = hash_table[sum];
            cout << "(" << arr[pp.first] << " + " << arr[pp.second] << ") = (" << arr[i] << " + " << arr[j] << ")";
            return true;
         }
      }
   }
   cout << "No pairs found";
   return false;
}
int main() {
   int arr[] = {7, 5, 9, 3, 6, 4, 2};
   int n = sizeof arr / sizeof arr[0];
   cout << "The pairs are: ";
   getTwoPairs(arr, n);
}

出力

The pairs are: (7 + 4) = (5 + 6)

  1. C++で2つの要素が隣接しないような循環配列の最大合計

    この問題では、循環配列cirArr[]が与えられます。私たちのタスクは、C++で2つの要素が隣接しないように循環配列の最大合計を見つけるプログラムを作成することです。 問題の説明 循環配列の場合、隣接する要素を取得できないように、配列の要素の最大合計を見つける必要があります。つまり、代替要素を取得する必要があります。 循環アレイ は、配列の最後の要素が最初の要素に接続されている特殊なタイプの配列です。 問題を理解するために例を見てみましょう 入力 cirArr[] = {4, 1, 5, 3, 2} 出力 9 説明 最大合計循環サブシーケンスは[4、5、2]です。合計=9 ソリ

  2. C++で指定された配列の要素の階乗のGCDを検索します

    N個の要素を持つ配列Aがあるとします。配列のすべての要素の階乗のGCDを見つける必要があります。要素が{3、4、8、6}であるとすると、階乗のGCDは6です。ここでトリックを確認します。 2つの数値のGCDは、両方の数値を除算する最大の数値であるため、2つの数値の階乗のGCDは、最小の数値自体の階乗の値です。だから3の公約数!と5! 3です! =6. 例 #include <iostream> using namespace std; long fact(int n){    if(n <= 1)       return