C++でi*arr [i]> j *arr[j]を保持する配列内のペアをカウントします
数字の配列が与えられます。目標は、条件を保持するように配列の要素のペアを見つけることです
(i * arr [i]> j * arr [j])の場合、(arr [i]、arr [j])は有効なペアです。
配列が[5,4,3,2,1]の場合、ペアは[3,1]と[2,1]になります。
例を挙げて理解しましょう。
入力 − arr [] =[1,5,4,1,2,8,3]
出力 − i * arr [i]> j * arr[j]を保持する配列内のペアの数は− 3
説明 −ペアは(5,1)、(4,1)、(8,3)
入力 − arr [] =[-1、-2、3、4、5、6]
出力 − i * arr [i]> j *arr[j]を保持する配列内のペアの数は-1
説明 −ペアは(-1、-2)
以下のプログラムで使用されているアプローチは次のとおりです
forループを2回使用して、1からNまでトラバースします。すべてのiとarr[i]について、条件i * arr [i]> j * arr [j](およびi!=j)となるようにjとarr[j]を検索します。条件が真の場合はカウントをインクリメントします。
-
整数の配列を取ります。
-
関数condition_pair(int arr []、int size)は、配列とそのサイズを取得し、条件が満たされるようにペアの数を返します。
-
初期カウントを0とします。
-
i=1からi
までトラバースします -
j =i+1からj
へのトラバース -
(i * arr [i])>(j * arr [j])が真の場合。インクリメントカウント。
-
iとjごとに、temp =(i * j)%(i + j)を計算します。
-
両方の反復が終了すると、カウントにはそのようなペアの総数が含まれます。
-
結果としてカウントを返します。
例
#include <iostream>
using namespace std;
int condition_pair(int arr[], int size){
int count = 0;
for (int i = 0; i < size - 1; i++){
for (int j = i + 1; j < size; j++){
if(i*arr[i] > j*arr[j]){
count++;
}
}
}
return count;
}
int main(){
int arr[] = { 2, 4, 1, 9, 6 };
int size = sizeof(arr) / sizeof(arr[0]);
cout<<"Count of pairs in an array that hold i*arr[i] > j*arr[j] are: "<<condition_pair(arr, size);
return 0;
} 出力
上記のコードを実行すると、次の出力が生成されます-
Count of pairs in an array that hold i*arr[i] > j*arr[j] are: 2
-
C++でx^y> y ^ xとなる配列内のペア(x、y)の数を見つけます
y ^ xとなるペアの数を見つけます。ここで、xはXの要素であり、yはYの要素です。X=[2、1、6]、およびY =[1、5]と仮定します。 、出力は3になります。3つのペアがあるため、これらは(2、1)、(2、5)、および(6、1)です y^xの場合になります。これがトリックです。 配列Yを並べ替える Xの各要素xについて、Yのxより大きい最小数のインデックスを見つける必要があります。これを行うには、二分探索を使用します。それ以外の場合は、upper_bound()関数も使用できます。 見つかったインデックスの後のすべての数値は関係を満たしているので、それをカウントに追加
-
配列内の反転をカウントするC++プログラム
カウント反転とは、配列をソートするために必要なスイッチの数を意味します。配列がソートされている場合、反転カウント=0。反転カウント=配列が逆の順序でソートされた場合の最大値。 配列内の反転をカウントするC++プログラムを開発しましょう。 アルゴリズム Begin Function CountInversionArray has arguments a[], n = number of elements. initialize counter c := 0 for i in range 0 to n-1, do &n