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

すべての奇数のインデックス付き要素がC++の以前の要素よりも大きくなるように配列を再配置します


正の整数型の配列、たとえば、任意のサイズのarr[]が与えられます。タスクは、奇数のインデックスに存在するすべての要素が偶数のインデックスに存在する要素よりも大きい値になるように配列を再配置し、結果を出力することです。

このためのさまざまな入出力シナリオを見てみましょう-

入力 − int arr [] ={2、1、5、4、3、7、8}

出力 −配置前の配列:2 1 5 4 3 78すべての奇数のインデックス付き要素が以前よりも大きくなるように配列を再配置する:1 4 2 5 3 8 7

説明 −サイズ7の整数配列が与えられます。ここで、偶数インデックスの要素が大きい場合、つまり、偶数インデックスの要素を奇数インデックスの要素と交換します。

Arr[0] > arr[1] = call swap = {1, 2, 5, 4, 3, 7, 8}
Arr[2] > arr[3] = call swap = {1, 2, 4, 5, 3, 7, 8}
Arr[6] > arr[5] = call swap = {1, 2, 4, 5, 3, 8, 7}
Arr[2] > arr[1] = call swap = {1, 4, 2, 5, 3, 8, 7}

入力 − int arr [] ={3、2、6、9}

出力 −配置前の配列:3 2 6 9すべての奇数のインデックス付き要素が以前よりも大きくなるように配列を再配置する:2 3 6 9

説明 −サイズ4の整数配列が与えられます。ここで、偶数インデックスの要素が大きい場合、つまりArr [0]> arr [1] =call swap ={2、 3、6、9}。位置にあるすべての要素が条件を満たすため、swapメソッドをさらに呼び出す必要はありません

以下のプログラムで使用されているアプローチは次のとおりです

  • 整数型要素の配列を入力し、配列のサイズを計算します。

  • 配置する前に配列を印刷し、関数Rearrangement(arr、size)を呼び出します

  • 関数Rearrangement(arr、size)の内部

    • 整数型の変数を作成します。たとえば、ptrを作成し、size-1で設定します。

    • ループFORを開始し、iから0まで、iがptr未満でi =i + 1になるまでループ内で、arr[i]がarr[i + 1]より大きいかどうかを確認してから、swap(arr [i]、arr [ i + 1])。

    • IFサイズと1を確認してから、iからptrまでループFORを開始し、iが0より大きくi =i-2になるまでループ内で、IF arr[i]がarr[i-1]より大きいことを確認してからswap(arr [i ]、arr [i-1])

  • 配列の値を再配置した後、配列を出力します。

#include <iostream>
using namespace std;
void Rearrangement(int arr[], int size){
   int ptr = size - 1;
   for(int i = 0; i < ptr; i = i+2){
      if(arr[i] > arr[i+1]){
         swap(arr[i], arr[i+1]);
      }
   }
   if(size & 1){
      for(int i = ptr; i > 0; i = i-2){
         if(arr[i] > arr[i-1]){
            swap(arr[i], arr[i-1]);
         }
      }
   }
}
int main(){
   //input an array
   int arr[] = {2, 1, 5, 4, 3, 7, 8};
   int size = sizeof(arr) / sizeof(arr[0]);
   //print the original Array
   cout<<"Array before Arrangement: ";
   for (int i = 0; i < size; i++){
      cout << arr[i] << " ";
   }
   //calling the function to rearrange the array
   Rearrangement(arr, size);
   //print the array after rearranging the values
   cout<<"\nRearrangement of an array such that every odd indexed element is greater than it previous is: ";
   for(int i = 0; i < size; i++){
      cout<< arr[i] << " ";
   }
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます

Array before Arrangement: 2 1 5 4 3 7 8
Rearrangement of an array such that every odd indexed element is greater than it previous is: 1 4 2 5 3 8 7

  1. C ++での混乱のカウント(元の位置に要素が表示されないような順列)

    混乱とは、元の位置に数字が表示されないようにN個の数字を並べ替えることです。たとえば、{1,2,3}の考えられる混乱の1つは、{1,1,3}です。この中の要素は元の位置にありません。ここでの目標は、N個の数字の混乱の可能性を数えることです。 これは、再帰的なソリューションを使用して行います。以下の番号について。要素の- N =0、混乱なし、1を返します N =1、1つの数値のみ、0を返します N =2、可能な位置の交換は1つだけ、{1,2}→{1,1}、1を返す N =3、2つの可能な順列、例:{1,2,3}→{1,3,1}、{3,1,2}カウント2 N =4、9つの可能な順列

  2. C ++では、すべての要素がk以上になるまで配列の要素を追加します。

    配列 −配列は、同じデータ型の要素のコンテナであり、その要素のインデックスは0です。 この問題では、整数の配列を使用します。そして、すべての要素が指定された数より大きいかどうかを確認します。ここでは、配列のすべての要素が指定された数k以上であるかどうかを確認します。そうでない場合は、配列の2つの最小要素を追加し、この合計を1つの要素として扱います。次に、新しいアレイの同じ条件を再度確認します。条件が真であることが判明した場合、合計が実行された回数が返されます。 Array = { 2, 6,3,12, 7} K = 5 Output : 1 説明 −最初に、すべての要素がkより大きいかどう