이 문제에서는 정수 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