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

C++で配列の合計を奇数にするための最小限の削除


問題の説明

N個の整数の配列arr[]が与えられます。残りの要素の合計が奇数になるように、配列から削除する必要のある要素の最小数を見つけるプログラムを作成する必要があります。

入力配列が{10、20、30、5、7}の場合、配列の合計を奇数にするために1つの要素、つまり5または7を削除する必要があります

アルゴリズム

1. Sum of any number of even numbers is always even
2. Sum of odd numbers of odd numbers is always odd
3. Sum of odd numbers of even times is always even
4. Count the number of odd elements in the array. If the count of odd elements in the array is even, then we need to remove single element from the array but if the count of odd elements in the array is odd then there is no need to remove any element

#include <bits/stdc++.h>
using namespace std;
int getMinRemovals(int *arr, int n) {
   int cnt = 0;
   for (int i = 0; i < n; ++i) {
      if (arr[i] % 2 == 1) {
         ++cnt;
      }
   }
   return (cnt % 2 == 0) ? 1 : 0;
}
int main() {
   int arr[] = {10, 20, 30, 5, 7};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Minimum required removals = " <<
   getMinRemovals(arr, n) << endl;
   return 0;
}

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

出力

Minimum required removals = 1

  1. C++合計配列パズル

    配列 同じデータ型の複数の要素を格納するデータ構造です。値のセット全体を一度に保存できます。ただし、その長さは事前に定義する必要があります。 この合計配列パズルでは、nと言う明確なサイズの配列A1が与えられます。このパズルを解くために、位置が使用されている要素を除く配列のすべての要素の合計を格納するS1という配列を作成します。たとえば、S1 [3]が計算されている場合、位置4の要素を除くA1のすべての要素の合計が求められます。 例- Array A1 = {1,2,3,4,6} Output S1 = {15,14,13,12,10} 説明 −合計配列を計算するには、初期配列の各要素を合計

  2. C++で互いに素な配列を作成するための最小限の挿入

    このセクションでは、別の興味深い問題が発生します。 N個の要素の配列があるとします。この配列を互いに素な配列にするためには、交点の最小数を見つける必要があります。互いに素な配列では、2つの連続する要素ごとのgcdは1です。配列も印刷する必要があります。 {5、10、20}のような要素があるとします。これは互いに素な配列ではありません。ここで、5、10、10、20の間に1を挿入すると、互いに素な配列になります。したがって、配列は{5、1、10、1、20}のようになります。 アルゴリズム makeCoPrime(arr, n): begin    count := 0 &nb