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

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


ここでは、1つの配列が与えられたと仮定して、1つの問題が発生します。 n個の要素があります。左側の偶数の頻度と右側の偶数の頻度が同じであるか、左側の奇数の頻度が右側の奇数の頻度と同じである1つのインデックスを見つける必要があります。そのような結果がない場合は、-1を返します。

配列が{4、3、2、1、2、4}のようであると仮定します。出力は2です。インデックス2の要素は2で、左側に奇数が1つだけあり、右側に奇数が1つだけあります。

この問題を解決するために、左右の情報を格納するためのペアの2つのベクトルを作成します。左側のベクトルは左側の奇数と偶数の頻度を格納し、右側のベクトルは右側でも同じことを行います。左右の偶数カウントまたは左右の奇数カウントが同じ場合は、インデックスを返します。

アルゴリズム

getIndex(arr、n)-

Begin
   define odd and even, and initialize as 0
   define left_vector, right_vector for odd even pairs
   add (odd, even) into left_vector
   for i in range 0 to n-1, do
      if arr[i] is even, then increase even, otherwise increase odd
         add (odd, even) into left_vector
   done
   odd := 0 and even := 0
   add (odd, even) into right_vector
   for i in range n-1 down to 1, do
      if arr[i] is even, then increase even, otherwise increase odd
         add (odd, even) into right_vector
   done
   reverse the right_vector
   for each element at index i in left_vector, do
      if left_vector[i].first = right_vector[i].first, or left_vector[i].odd= right_vector[i].odd, then return i
   done
   return -1
End

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
int getIndex(int n, int arr[]) {
   int odd = 0, even = 0;
   vector<pair<int, int >> left_vector, right_vector;
   left_vector.push_back(make_pair(odd, even));
   for (int i = 0; i < n - 1; i++) { //count and store odd and even frequency for left side
      if (arr[i] % 2 == 0)
         even++;
      else
         odd++;
      left_vector.push_back(make_pair(odd, even));
   }
   odd = 0, even = 0;
   right_vector.push_back(make_pair(odd, even)); //count and store odd and even frequency for right side
   for (int i = n - 1; i > 0; i--) {
      if (arr[i] % 2 == 0)
         even++;
      else
         odd++;
      right_vector.push_back(make_pair(odd, even));
   }
   reverse(right_vector.begin(), right_vector.end());
   for (int i = 0; i < left_vector.size(); i++) {
      if (left_vector[i].first == right_vector[i].first ||
         left_vector[i].second == right_vector[i].second)
      return i;
   }
   return -1;
}
int main() {
   int arr[] = {4, 3, 2, 1, 2};
   int n = sizeof(arr) / sizeof(arr[0]);
   int index = getIndex(n, arr);
   if(index == -1) {
      cout << "-1";
   } else {
      cout << "index : " << index;
   }
}

出力

index : 2

  1. 両側に同じ数の偶数または奇数の配列インデックス用のC++プログラム?

    偶数または奇数の数が同じである配列インデックスを見つけることは、その両側に同じ数または奇数の数を持つ数です。つまり、左側の番号=右側の番号です。 ここでは、概念に関連するいくつかの定義が必要です。 配列 −同じデータ型の要素のコンテナ。 配列インデックス −要素の位置はそのインデックスと呼ばれます。配列のインデックスは常に0から始まります。 偶数 −2で割り切れる数。 奇数 −2で割り切れない数。 整数は偶数でも奇数でもかまいません。 それでは、概念をより明確にする例を見てみましょう。 Input: arr[] = {4, 3, 2, 1, 2} Output : 2 説明 イ

  2. 合計と積が両方ともNと同じである2つの数値を見つけるC++プログラム

    このチュートリアルでは、両方が次のようになる2つの数字(たとえば「a」と「b」)を見つけるプログラムについて説明します a+b = N and a*b = N are satisfied. 両方の方程式から「a」を削除すると、「b」と「N」の2次方程式が得られます。つまり b2 - bN + N = 0 この方程式には、「a」と「b」の両方の値を与える2つの根があります。行列式を使用して根を見つけると、「a」と「b」の値が次のようになります。 $ a =(N- \ sqrt {N * N-4N)} / 2 \\ b =(N + \ sqrt {N * N-4N)} / 2 $ 例 #i