Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm các cặp trong một mảng sao cho cả hai phần tử có các bit được đặt bằng nhau trong C ++

Chúng tôi được cung cấp một mảng các phần tử kiểu số nguyên và nhiệm vụ là tạo các cặp từ mảng đã cho và tính toán các bit tập hợp của các phần tử trong cặp và kiểm tra xem cả hai phần tử có số bit tập hợp bằng nhau hay không.

Các bit tập hợp trong một số nhị phân được biểu diễn bằng 1. Bất cứ khi nào chúng ta tính toán số nhị phân của một giá trị số nguyên thì nó được tạo thành dưới dạng kết hợp của 0 và 1. Vì vậy, chữ số 1 được gọi là bit set trong các điều kiện của máy tính.

Đầu vào

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

Đầu ra

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

Giải thích

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)

Đầu vào

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

Đầu ra

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

Giải thích

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).

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập một mảng các phần tử số nguyên và tính toán kích thước của một mảng và truyền dữ liệu vào hàm

  • Khai báo số đếm biến tạm thời để lưu trữ số lượng các cặp có số bit đặt bằng nhau.

  • Bắt đầu vòng lặp FOR từ i đến 0 cho đến hết kích thước của một mảng

  • Bên trong vòng lặp, bắt đầu một vòng lặp FOR khác từ j đến i + 1 cho đến khi kích thước của một mảng

  • Bên trong vòng lặp, đặt phần tử thứ nhất và thứ hai của một cặp làm tổng số bit đã đặt bằng cách gọi hàm ‘__builtin_popcount (element)’ trả về tổng số bit đã đặt của một số nguyên.

  • Kiểm tra các bit tập hợp IF của phần tử thứ nhất và thứ hai của một cặp có bằng nhau rồi tăng số lượng lên 1

  • Trả lại số lượng

  • In kết quả.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

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