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

C++での等しい合計とXOR


この問題では、整数nが与えられます。私たちのタスクは、i =0からnまでの整数の数を見つけるプログラムを作成することです。ここで、合計はXORに等しくなります。つまり、(n + i)=(n ^ i)。

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

入力: n =4

出力: 4

説明:

0からnまでのiのすべての値を考慮して

i =0、4 + 0 =4、4 ^ 0 =4
i =1、4 + 1 =5、4 ^ 1 =5
i =2、4 + 2 =6、4 ^ 2 =6
i =3、4 + 3 =7、4 ^ 3 =7
i =4、4 + 4 =8、4 ^ 4 =0
カウント=4

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

簡単な解決策は、nとiの合計とnとiのxorの値を見つけることです。これらの両方の値を比較してから、それらが等しい値を数えます。

アルゴリズム:

ステップ1: i=0からnまでのすべての値をループします。

ステップ1.1: (n + i)の値を見つけます。

ステップ1.2: (n ^ i)の値を見つけます。

ステップ1.3: 手順1.1と1.2で見つかった値を比較します。
ステップ1.4: それらが等しい場合は、カウントを増やします。

ステップ2: カウントを印刷する 値。

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

#include <iostream>
using namespace std;

int main() {
   
   int n = 5;
   int counter = 0;
   for(int i=0; i<=n; i++ )
      if ( (n+i) == (n^i) )
         counter++;
   cout<<"The count of integers with equal sum and XOR is "<<counter;
   return 0;
}

出力-

The count of integers with equal sum and XOR is 2

この方法は優れていますが、問題のより良い解決策になる可能性があります。これは、

n ^ i =n + iの場合 、次に n&i =0

n&i =0の場合、そのためには、2つの数値が反対のセットビットとアンセットビットを持つ必要があります。そして、そのような値を数える必要があります。これを行うためのプログラムがあります

#include <iostream>
using namespace std;

int countValuesWithEqualSumXOR(int n) {
   
   int countUnSetBits=0;
   while (n) {
      if ((n & 1) == 0)
         countUnSetBits++;
      n=n>>1;
   }
   return 1 << countUnSetBits;
}

int main()
{
   int n = 6;
   cout<<"The count of integers with equal sum and XOR is "<<countValuesWithEqualSumXOR(n);
   return 0;
}

出力-

The count of integers with equal sum and XOR is 2

  1. C++でのパーティションの等しいサブセット和

    正の数のみを含む空でない配列があるとすると、両方のサブセットの要素の合計が同じになるように、配列を2つのサブセットに分割できるかどうかを確認する必要があります。したがって、入力が[1,5,11,5]のような場合、出力はtrueになります。この配列は[1、5、5]および[11]として分割できるため これを解決するには、次の手順に従います- n:=配列のサイズ 合計:=0 for i:=0からn– 1 sum:=sum + nums [i] 合計が奇数の場合、falseを返します 合計:=合計/ 2 サイズ合計+1のdpという1つの配列を作成します dp [0]:=true

  2. N以下で、C++の合計がSである最小数

    問題の説明 1からNまでのN個の数とS個の数が与えられます。タスクは、合計してSを与える最小数の数を出力することです 例 n=7およびs=10の場合、最低2つの数字が必要です (9, 1) (8, 2) (7, 3) (6, 4) アルゴリズム Answer can be calculated using below formula (S/N) + 1 if { S %N > 0} 例 #include <bits/stdc++.h> using namespace std; int getMinNumbers(int n, int s) {    r