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

Số phần tử mảng liền kề tối đa có cùng số bit đặt trong C ++

Chúng tôi được cung cấp với một mảng các phần tử số nguyên không được sắp xếp và nhiệm vụ là tính toán các thứ của twomajor tức là

  • Các phần tử có cùng số bit đặt
  • Ngoài ra, các phần tử có cùng các bit được đặt về bản chất phải liền kề nhau.

Đầu vào

int arr[] = { 5, 8, 1, 2, 9, 12}

Đầu ra - Số phần tử mảng liền kề tối đa có cùng số bit đặt là - 3

Giải thích - chúng tôi sẽ tính toán các chữ số nhị phân cho các phần tử của một mảng và tính toán các bit đặt của chúng.

arr[0] = 5 => 0101 => total set bits are -: 2
arr[1] = 8 => 1000 => total set bits are -: 1
arr[2] = 1 => 0001 => total set bits are -: 1
arr[3] = 2 => 0010 => total set bits are -: 1
arr[4] = 9 => 1001 => total set bits are -: 2
Arr[5] = 12 => 1100 => total set bits are -: 2

Vì vậy, các phần tử có cùng số bit đặt và cũng liền nhau về bản chất là 5, 9 và 12. Số phần tử mảng liền kề nhau có cùng số bit đặt là 3

Đầu vào - int arr [] ={5, 8, 1, 2}

Đầu ra - Số phần tử mảng liền kề tối đa có cùng số bit đặt là - 2

Giải thích - chúng tôi sẽ tính toán các chữ số nhị phân cho các phần tử của một mảng và tính toán các bit đặt của chúng.

arr[0] = 5 => 0101 => total set bits are -: 2
arr[1] = 8 => 1000 => total set bits are -: 1
arr[2] = 1 => 0001 => total set bits are -: 1
arr[3] = 2 => 0010 => total set bits are -: 1

Vì vậy, các phần tử có cùng số bit đặt và cũng kề nhau về bản chất là 1 và 2. Vậy chúng tối đa số phần tử mảng liền nhau có cùng số bit đặt là 2

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

  • Nhập các phần tử mảng kiểu số nguyên

  • Tính kích thước của một mảng bằng cách sử dụng hàm size và chuyển nó vào hàm

  • Lấy một biến tạm thời và đặt nó thành giá trị 1 và cũng là một biến tối đa có giá trị 1.

  • Tạo vec biến kiểu vectơ

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

  • Tính toán các bit tập hợp nhị phân của các phần tử mảng bằng cách sử dụng hàm “__builtin_popcount (phần tử)” sẽ trả về tổng số bit tập hợp của một phần tử nhất định được chuyển đến nó và lưu trữ số lượng vào vectơ.

  • Bắt đầu vòng lặp cho từ 1 đến kích thước của một vectơ

  • Bên trong vectơ, hãy kiểm tra xem vec [i + 1] =vec [i] rồi tăng giá trị của nhiệt độ lên 1

  • Nếu không, hãy đặt nhiệt độ thành 1

  • Đặt giá trị tối đa bằng cách chọn giá trị tối đa giữa nhiệt độ và tối đa bằng cách sử dụng chức năng tối đa.

  • Trả về biến tối đa

  • In kết quả.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
//function to calculate maximum same number of bits
int maximum_SameBits(int arr[], int size){
   int temp = 1;
   int maximum = 1;
   vector<int> vec;
   for (int i = 0; i < size; i++){
      vec.push_back(__builtin_popcount(arr[i]));
   }
   for (int i = 1; i < vec.size(); i++){
      if (vec[i + 1] == vec[i]){
         temp++;
      }
      else{
         temp = 1;
      }
      maximum = max(maximum, temp);
   }
   return maximum;
}
int main(){
   int arr[] = { 5, 8, 1, 2, 9, 12};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Maximum number of contiguous array elements with same number of set bits are:
   "<<maximum_SameBits(arr, size);
   return 0;
}

Đầu ra

Maximum number of contiguous array elements with same number of set bits are: 3