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

C++の偶数インデックスの偶数と奇数インデックスの奇数


この問題では、n/2の偶数値とn/2の奇数値で構成されるサイズnの配列arr[]が与えられます。私たちのタスクは、偶数を偶数インデックスに、奇数を奇数インデックスに配置するプログラムを作成することです。

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

入力: arr [] ={5、1、6、4、3、8}

出力: arr [] ={6、1、5、4、3、8}

ソリューションアプローチ-

解決策は、配列をトラバースしてから、偶数の位置にない終了番号を見つけて、次のオフプレース値に置き換えることです。これは有望なソリューションですが、偶数用と奇数用の2つのインデックスを使用することで、ソリューションをより効率的にすることができます。偶数のインデックスに偶数ではない要素と奇数のインデックスにない要素がある場合は、それらを交換します。それ以外の場合は、両方のインデックスを2つ増やします。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;

void O_EReshuffle(int arr[], int n) {
   
   int oIndex = 1;
   int eIndex = 0;
   
   for(int i = 0; i < n; ) {
     
      while (eIndex < n && arr[eIndex] % 2 == 0)
         eIndex += 2;
         
      while (oIndex < n && arr[oIndex] % 2 == 1)
         oIndex += 2;
         
      if (eIndex < n && oIndex < n)
         swap (arr[eIndex], arr[oIndex]);
         
      else
         break;
   }
}

int main()
{
   int arr[] = { 5, 1, 6, 4, 3, 8 };
   int n = sizeof(arr) / sizeof(arr[0]);

   cout << "Array before Reshuffling: ";
   for(int i = 0; i < n ; i++){
      cout<<arr[i]<<"\t";
   }
   O_EReshuffle(arr, n);

   cout<<"\nArray after Reshuffling: ";
   for(int i = 0; i < n ; i++){
      cout<<arr[i]<<"\t";
   };

   return 0;
}

出力-

Array before Reshuffling: 5 1 6 4 3 8
Array after Reshuffling: 4 1 6 5 8 3

  1. C++で奇数と偶数のノードを含むすべてのレベルを出力します

    この問題では、ツリーが与えられます。そして、偶数のノードと奇数のノードを含むすべてのレベルを印刷する必要があります。 概念をよりよく理解するために例を見てみましょう 出力- Levels with odd number of nodes: 1, 3, 4 Levels with even number of nodes: 2 説明 −第1レベルには1つの要素(奇数)、第2レベルには2つの要素(偶数)、第3レベルには3つの要素(奇数)、第4レベルには1つの要素(偶数)が含まれます。 さて、この問題を解決するために。各レベルでノードの数を見つけ、それに応じて偶数-奇数レベルを出力す

  2. C++の両側に同じ数の偶数または奇数の配列インデックス

    ここでは、1つの配列が与えられたと仮定して、1つの問題が発生します。 n個の要素があります。左側の偶数の頻度と右側の偶数の頻度が同じであるか、左側の奇数の頻度が右側の奇数の頻度と同じである1つのインデックスを見つける必要があります。そのような結果がない場合は、-1を返します。 配列が{4、3、2、1、2、4}のようであると仮定します。出力は2です。インデックス2の要素は2で、左側に奇数が1つだけあり、右側に奇数が1つだけあります。 この問題を解決するために、左右の情報を格納するためのペアの2つのベクトルを作成します。左側のベクトルは左側の奇数と偶数の頻度を格納し、右側のベクトルは右側でも同