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

C++でAPを形成するソートされた配列のすべてのトリプレットを出力します


この問題では、並べ替えられた数値の配列が与えられ、算術プログレッションの形式のトリプレットを見つける必要があります。

等差数列 は、連続する用語間の差が同じである一連の数値です。

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

Input :
array = {2 , 5 , 7, 8 , 9 , 10}
Output :
2 5 8
5 7 9
7 8 9
8 9 10

この問題を解決するための簡単な解決策は、3つのループを実行し、すべてのトリプレットがAPにあるかどうかをチェックすることです。ただし、この方法では、n 3 のオーダーの時間計算量があります。 。

より良い解決策は、ハッシュを使用することです。この方法では、配列の2番目の要素から開始し、すべての要素をAPの中間要素として扱い、APを形成するかどうかを確認します。

#include <iostream>
using namespace std;
void TripletsAP(int arr[], int n){
   for (int i = 1; i < n - 1; i++){
      for (int j = i - 1, k = i + 1; j >= 0 && k < n;){
         if (arr[j] + arr[k] == 2 * arr[i]){
            cout<<arr[j]<<"\t"<<arr[i]<<"\t"<< arr[k] << endl;
            k++;
            j--;
         }
         else if (arr[j] + arr[k] < 2 * arr[i])
            k++;
         else
            j--;
      }
   }
}
int main(){
   int arr[] = {2 , 5 , 7, 8 , 9 , 10};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The triplets that are in AP are : \n";
   TripletsAP(arr, n);
   return 0;
}

出力

APにあるトリプレットは-

2 5 8
5 7 9
7 8 9
8 9 10

  1. C++のすべての配列要素で割り切れる範囲の数値をカウントします

    数値の範囲を定義するために、STARTとENDの2つの数値が提供されています。また、正の数の配列Arr[]。目標は、Arr []のすべての要素で割り切れる、[START、END]の範囲内にあるすべての数値を見つけることです。 方法1(ナイーブアプローチ) これを行うには、STARTからENDまで数値をトラバースし、数値ごとに、その数値が配列のすべての要素で割り切れるかどうかを確認します。はいの場合、カウントをインクリメントします。 方法2(配列要素のLCMによる除算性を確認する) すべての配列要素のLCMを見つけて、そのLCMで完全に割り切れる[START、END]の範囲内のすべての数値を

  2. C++の配列内のすべての素数の積

    いくつかの要素を持つ整数配列arr[]が与えられた場合、タスクはその数のすべての素数の積を見つけることです。 素数は、1で割った数、またはその数自体です。または、素数は、1とその数自体を除いて他の数で割り切れない数です。 1、2、3、5、7、11など 与えられた配列の解を見つける必要があります- 入力 −arr [] ={11、20、31、4、5、6、70} 出力 − 1705 説明 −配列の素数は− 11、31、5であり、それらの積は1705 入力 − arr [] ={1、2、3、4、5、6、7} 出力 − 210 説明 −配列の素数は− 1、2、3、5、7