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

C++で指定された配列から偶数要素と奇数要素が欠落しています


問題の説明

2つの整数配列even[]とodd[]が与えられ、それぞれ連続した偶数要素と奇数要素が含まれ、各配列から1つの要素が欠落しています。タスクは、不足している要素を見つけることです。

If even[] = {10, 8, 6, 16, 12} and
odd[] = {3, 9, 13, 7, 11} then
missing number from even array is 14 and from odd array is 5.

アルゴリズム

  • even[]配列の最小および最大の偶数要素を変数minEvenおよびmaxEvenに格納します
  • 最初のN個の偶数の合計はN*(N + 1)です。 2からminEvensaysum1までの偶数の合計と2からmaxEvensaysum2までの偶数の合計を計算します
  • 偶数配列の必要な合計はreqSum=sum2 – sum1 + minEvenになり、このreqSumからeven []配列の合計を引くと、欠落している偶数が得られます
  • 同様に、最初のN個の奇数の合計がN2であることがわかっているので、欠落している奇数も見つけることができます。

#include <bits/stdc++.h>
using namespace std;
void findMissingNums(int even[], int sizeEven, int odd[], int sizeOdd) {
   int minEven = INT_MAX;
   int maxEven = INT_MIN;
   int minOdd = INT_MAX;
   int maxOdd = INT_MIN;
   int sumEvenArr = 0, sumOddArr = 0;
   for (int i = 0; i < sizeEven; i++) {
      minEven = min(minEven, even[i]);
      maxEven = max(maxEven, even[i]);
      sumEvenArr += even[i];
   }
   for (int i = 0; i < sizeOdd; i++) {
      minOdd = min(minOdd, odd[i]);
      maxOdd = max(maxOdd, odd[i]);
      sumOddArr += odd[i];
   }
   int totalTerms = 0, reqSum = 0;
   totalTerms = minEven / 2;
   int evenSumMin = totalTerms * (totalTerms + 1);
   totalTerms = maxEven / 2;
   int evenSumMax = totalTerms * (totalTerms + 1);
   reqSum = evenSumMax - evenSumMin + minEven;
   cout << "Missing even number = " << reqSum - sumEvenArr << "\n";
   totalTerms = (minOdd / 2) + 1;
   int oddSumMin = totalTerms * totalTerms;
   totalTerms = (maxOdd / 2) + 1;
   int oddSumMax = totalTerms * totalTerms;
   reqSum = oddSumMax - oddSumMin + minOdd;
   cout << "Missing odd number = " << reqSum - sumOddArr << "\n";
}
int main() {
   int even[] = {10, 8, 6, 16, 12};
   int sizeEven = sizeof(even) / sizeof(even[0]);
   int odd[] = {3, 9, 13, 7, 11};
   int sizeOdd = sizeof(odd) / sizeof(odd[0]);
   findMissingNums(even, sizeEven, odd, sizeOdd);
   return 0;
}

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

出力

Missing even number = 14
Missing odd number = 5

  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、2、3、4、5、6、7、8、9}とします。したがって、偶数の位置の要素は1、3、5、7、9(0から開始)であり、奇数の場所の要素は2、4、6、8です。したがって、偶数の位置のデータの差は| 1〜3|です。 =2、次に| 2-5 | =3、| 3-7 | =4および|4-9| =5同様に、奇数の場所の差は4になります。 アルゴリズム offEvenDiff(arr、n) begin    even :