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

C++で偶数の位置が奇数より大きくなるように配列を再配置します


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

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

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

出力 −配置前の配列:2 1 4 3 6 5 8 7偶数が奇数より大きくなるように配列を再配置すると、次のようになります。1 2 3 4 5 6 7 8

説明 −正の要素と負の要素の両方を含むサイズ8の整数配列が与えられます。ここで、偶数の位置にあるすべての要素が奇数の位置にある要素よりも大きくなり、この操作を実行した後に形成される配列が1 2 3 4 5 6 7 8.になるように、配列を再配置します。

入力 − int arr [] ={-3、2、-4、-1}

出力 −配置前の配列:-3 2-4-1偶数の位置が奇数より大きくなるような配列の再配置は次のとおりです。-4-3-12

説明 -正の要素と負の要素の両方を含むサイズ8の整数配列が与えられます。ここで、偶数の位置にあるすべての要素が奇数の位置にある要素よりも大きくなり、この操作を実行した後に形成される配列が-4 -3-12になるように配列を再配置します。

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

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

  • 配列と配列のサイズをsort関数に渡すことにより、C++STLのsortメソッドを使用して配列をソートします。

  • 整数変数を宣言し、関数Rearrangement(arr、size)

    を呼び出して設定します。
  • 関数Rearrangement(arr、size)の内部

    • 整数型の配列を宣言します。たとえば、配列arr [size]

      と同じサイズのptr[size]を宣言します。
    • 一時的な整数型変数を宣言します。つまり、最初を0に、最後をサイズ-1に宣言します。

    • iが配列のサイズより小さくなるまで、ループFORをiから0まで開始します。ループ内で、IF(i + 1)%2が0に等しいことを確認してから、ptr[i]をarr[last-]に設定します。

    • それ以外の場合は、ptr[i]をarr[first++]に設定します。

  • 結果を印刷します。

#include <bits/stdc++.h>
using namespace std;
void Rearrangement(int* arr, int size){
   int ptr[size];
   int first = 0;
   int last = size - 1;
   for (int i = 0; i < size; i++){
      if((i + 1) % 2 == 0){
         ptr[i] = arr[last--];
      }
      else{
         ptr[i] = arr[first++];
      }
   }
}
int main(){
   //input an array
   int arr[] = {2, 1, 4, 3, 6, 5, 8, 7};
   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] << " ";
   }
   //sort an Array
   sort(arr, arr + size);
   //calling the function to rearrange the array
   Rearrangement(arr, size);
   //print the array after rearranging the values
   cout<<"\nRearrangement of an array such that even positioned are greater than odd is: ";
   for(int i = 0; i < size; i++){
      cout<< arr[i] << " ";
   }
   return 0;
}

出力

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

Array before Arrangement: 2 1 4 3 6 5 8 7
Rearrangement of an array such that even positioned are greater than odd is: 1 2 3 4 5 6 7 8

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

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

  2. C ++でa%b =kとなるような配列内のすべてのペア(a、b)を検索します

    配列Aがあるとすると、その配列から、a%b =kとなるようにすべてのペア(a、b)を取得する必要があります。配列がA=[2、3、4、5、7]、k =3であるとすると、ペアは(7、4)、(3、4)、(3、5)、(3、7)になります。 これを解決するために、リストをトラバースして、指定された条件が満たされているかどうかを確認します。 例 #include <iostream> using namespace std; bool displayPairs(int arr[], int n, int k) {    bool pairAvilable = true;