Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 Equal Sum 및 XOR

<시간/>

이 문제에서는 정수 n이 주어집니다. 우리의 임무는 i =0에서 n까지 정수의 개수를 찾는 프로그램을 만드는 것입니다. 여기서 합계는 XOR과 같습니다. 즉, (n+i) =(n^i)

문제를 이해하기 위해 예를 들어 보겠습니다.

입력: n =4

출력: 4

설명:

0에서 n까지의 i의 모든 값을 고려하면,

나는 =0, 4 + 0 =4, 4^0 =4
나는 =1, 4 + 1 =5, 4^1 =5
나는 =2, 4 + 2 =6, 4^2 =6
나는 =3, 4 + 3 =7, 4^3 =7
나는 =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이면 반대의 설정 및 설정되지 않은 비트를 갖는 두 숫자가 필요합니다. 그리고 우리는 그러한 가치를 계산해야 합니다. 이를 수행하는 프로그램이 있습니다.

예시

#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