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

C++で-1と+1の配列に合計が0のサイズKのサブセットがあるかどうかを調べます


この問題では、1と-1のみで構成される配列arr[]と整数値kが与えられます。私たちのタスクは、-1と+1の配列に合計が0のサイズKのサブセットがあるかどうかを見つけることです。

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

入力: arr [] ={-1、1、-1、-1、1、1、-1}、k =4

出力: はい

説明:

サイズ4のサブセット{-1、1、-1、1}。合計=-1+ 1-1 + 1 =0

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

合計が0に等しいサイズkのサブセットが存在するかどうかを確認する必要があります。サブセットとして、配列の任意の要素を考慮することができます。1と-1の数が等しい場合、合計は0になります。サブセット。これは、サブセットのサイズが偶数の場合にのみ可能です。

簡単に、

kが偶数の場合、trueを返します。
kが奇数の場合、falseを返します。

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

#include <iostream>
using namespace std;

int countOne(int a[], int n) {
   
   int i, count = 0;
   for (i = 0; i < n; i++)
      if (a[i] == 1)
         count++;
   return count;
}

bool isSubSetSumZeroFound(int arr[], int n, int K) {
   
   int totalOne = countOne(arr, n);
   int totalNegOne = n - totalOne;
   return (K % 2 == 0 && totalOne >= K / 2 && totalNegOne >= K / 2);
}

int main() {
   
   int arr[] = { 1, 1, -1, -1, 1, -1, 1, 1, -1 };
   int size = sizeof(arr) / sizeof(arr[0]);
   int K = 4;
   if (isSubSetSumZeroFound(arr, size, K))
      cout<<"Subset of size "<<K<<" with sum of all elements 0 exists.";
   else
      cout<<"No subset found";
   return 0;
}

出力

Subset of size 4 with sum of all elements 0 exists.

  1. C++で指定されたGCDとLCMのペアを検索します

    このセクションでは、指定されたGCD値とLCM値を使用してペアの数を取得する方法を説明します。 GCDとLCMの値が2と12であると仮定します。これで、可能な数値のペアは(2、12)、(4、6)、(6、4)、および(12、2)になります。したがって、私たちのプログラムはペアの数を見つけます。それは4です。 この問題を解決するための手法を理解するためのアルゴリズムを見てみましょう。 アルゴリズム countPairs(gcd, lcm): Begin    if lcm is nit divisible by gcd, then       r

  2. CおよびC++で「長い」データ型の必要性はありますか?

    CまたはC++には、整数型データに使用される4つの異なるデータ型があります。これらの4つのデータ型は、short、int、long、およびlonglongです。これらのデータ型はそれぞれ、異なるメモリスペースを使用します。サイズは、アーキテクチャやオペレーティングシステムによって異なります。 intは4バイトかかる場合もあれば、2バイトかかる場合もあります。これはコンパイラーでも起こります。したがって、クロスコンパイラを使用できます。 クロスコンパイラは基本的にコンパイラであり、現在のプラットフォーム以外のプラットフォーム用にコンパイルすることができます。 したがって、次のコードを32ビッ