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

C++에서 두 요소가 동일한 세트 비트를 갖도록 배열의 카운트 쌍

<시간/>

정수 유형 요소의 배열이 주어지고 작업은 주어진 배열에서 쌍을 형성하고 쌍에서 요소의 세트 비트를 계산하고 두 요소의 세트 비트 수가 동일한지 여부를 확인하는 것입니다.

이진수의 세트 비트는 1로 표시됩니다. 정수 값의 이진수를 계산할 때마다 0과 1의 조합으로 구성됩니다. 따라서 컴퓨터 용어로 1자리를 세트비트라고 합니다.

입력

int arr[] = {6, 5, 1, 3, 7}

출력

Count of pairs in an array such that both elements has equal set bits are: 3

설명

The pairs formed from the given array are-:
(6, 5): 6 -> 2 set bits, 5 -> 2 set bits :(valid pair)
(6, 5): 6 -> 2 set bits, 1 -> 1 set bit:(invalid pair)
(6, 3): 6 -> 2 set bits, 3 -> 2 set bits :(valid pair)
(6, 7): 6 -> 2 set bits, 7 -> 3 set bits :(invalid pair)
(5, 1): 5 -> 2 set bits, 1 -> 1 set bits :(invalid pair)
(5, 3): 5 -> 2 set bits, 3 -> 2 set bits :(valid pair)
(5, 1): 5 -> 2 set bits, 7 -> 3 set bits :(invalid pair)
(1, 3): 1 -> 1 set bits, 3 -> 2 set bits :(invalid pair)
(1, 3): 1 -> 1 set bits, 7 -> 3 set bits :(invalid pair)
(3, 7): 3 -> 2 set bits, 7 -> 3 set bits :(invalid pair)
So, there are 3 valid pairs with equal number of set bits and those are (6, 5), (6, 3) and (5, 2)

입력

int arr[] = {4, 6, 3, 2}

출력

Count of pairs in an array such that both elements has equal set bits are: 3

설명

The pairs formed from the given array are-:
(4, 6): 4 -> 1 set bits, 6 -> 2 set bits :(invalid pair)
(4, 3): 4 -> 1 set bits, 3 -> 2 set bits :(invalid pair)
(4, 2): 4 -> 1 set bits, 2 -> 1 set bits :(valid pair)
(6, 3): 6 -> 2 set bits, 3 -> 2 set bits :(valid pair)
(6, 2): 6 -> 2 set bits, 2 -> 1 set bits :(invalid pair)
(3, 2): 3 -> 2 set bits, 2 -> 1 set bits :(invalid pair)
So, there are 2 valid pairs with equal number of set bits and those are (4, 2) and (6, 3).

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 정수 요소의 배열을 입력하고 배열의 크기를 계산하고 데이터를 함수에 전달

  • 동일한 수의 설정 비트를 가진 쌍의 개수를 저장하기 위해 임시 변수 개수를 선언합니다.

  • 배열의 크기까지 i에서 0까지 FOR 루프 시작

  • 루프 내에서 배열의 크기까지 j에서 i + 1까지 FOR 또 다른 루프를 시작합니다.

  • 루프 내에서 정수의 총 설정 비트 수를 반환하는 '__builtin_popcount(element)' 함수를 호출하여 쌍의 첫 번째 및 두 번째 요소를 총 설정 비트 수로 설정합니다.

  • 쌍의 첫 번째 및 두 번째 요소의 IF 세트 비트가 동일한지 확인한 다음 카운트를 1 증가시킵니다.

  • 개수 반환

  • 결과를 인쇄합니다.

예시

#include <iostream>
using namespace std;
int pair_setBit(int arr[], int size){
   int count = 0;
   for(int i = 0 ;i <size ; i++){
      for(int j = i+1; j<size; j++){
         int first = __builtin_popcount(arr[i]);
         int second = __builtin_popcount(arr[j]);
         if(first == second){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = {6, 5, 1, 3, 7};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of pairs in an array such that both elements has equal set bits are: "<<pair_setBit(arr, size);
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Count of pairs in an array such that both elements has equal set bits are: 3