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

2つの合計がC++の3番目の要素に等しくなるようなトリプレットを見つけます


n個の数の配列があるとします。 2つの要素の合計が3番目の要素と同じになるように、3つの数値を見つける必要があります。したがって、配列が[5、32、1、7、10、50、19、21、2]のような場合、出力は21、2、19になります。そのような要素が見つからない場合は、そのメッセージを表示します。

>

これを解決するために、次のようにいくつかの手順を実行します-

  • 指定された配列を並べ替える

  • 次に、最後の要素から最大の要素の修正を開始し、配列をトラバースして、合計が3番目の要素になる他の2つの数値を見つけます。

  • 2つのポインタjとkを取ります。jは最初から、kは最後から、i-1から2つの数値のうち最小のものを見つけ、残りの2つの数値のうち最大のものを見つけます。

  • 両方の数値の加算がまだArr[i]未満の場合は、2つの数値の合計の値を増やし、それによってjポインターを増やして、Arr [j] +Arr[の値を増やす必要があります。 k]

  • 両方の数値の加算がArr[i]より大きい場合は、2つの数値の合計の値を減らし、それによってポインターkを減らして、Arr [j] +Arr[kの全体的な値を減らす必要があります。 ]

#include<iostream>
#include<algorithm>
#define N 5
using namespace std;
void getValueTriplet(int arr[], int n) {
   sort(arr, arr + n);
   for (int i = n - 1; i >= 0; i--) {
      int j = 0;
      int k = i - 1;
      while (j < k) {
         if (arr[i] == arr[j] + arr[k]) {
            cout << "The numbers are " << arr[i] << " " << arr[j] << " " << arr[k] << endl;
            return;
         }
         else if (arr[i] > arr[j] + arr[k])
         j += 1;
         else
         k -= 1;
      }
   }
   cout << "No such triplet exists";
}
int main() {
   int arr[] = { 5, 32, 1, 7, 10, 50, 19, 21, 2 };
   int n = sizeof(arr) / sizeof(arr[0]);
   getValueTriplet(arr, n);
}

出力

The numbers are 21 2 19

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

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

  2. 各要素がN以下になるような一意のペアを見つけるC++プログラム

    この記事では、N以下の要素を持ち、いくつかの特定の条件に従う一意の数のペアを見つけるプログラムについて説明します- 2つの数値の差の二乗は、これら2つの数値のLCMと等しくなければなりません。 これらの2つの数値のHCFは、任意の2つの連続する数値の積として表すことができます。 この問題を解決するための最良のアプローチは、2つの連続した数(1から開始)を取り、それらの数の積の倍数を見つけることです。次に、倍数の中で、1つのペアの数値を指定するには、ペアの数値が最初に指定された条件を満たすかどうかを確認する必要があります。 たとえば、2と3の場合を考えます。それらの積は6にな