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

Số phần tử tối thiểu cần loại bỏ để tạo ra XOR tối đa khi sử dụng C ++.

Tuyên bố vấn đề

Cho một số N. Nhiệm vụ là tìm số phần tử tối thiểu bị xóa ở giữa đến N sao cho XOR thu được từ các phần tử còn lại là lớn nhất.

Thuật toán

1. If n is 1 or 2 then there is no need to remove any element. Hence answer is zero
2. Find a number which is power of 2 and greater than or equal to. Let us call this number as nextNumber
   2.1. If n == nextNumber or n == (nextNumber – 1) then answer is 1
   2.2. If n = (nextNumber -2) then answer is 0
3. If n is an even then answer is 1 otherwise 2

Ví dụ

#include <iostream>
using namespace std;
int nextPowerOf2(int n){
   if (n && !(n & (n - 1))) {
      return n;
   }
   int cnt = 0;
   while (n) {
      n = n / 2;
      ++cnt;
   }
   return (1 << cnt);
}
int elmentsToBeRemoved(int n){
   if (n == 1 || n == 2) {
      return 0;
   }
   int nextNumber = nextPowerOf2(n);
   if (n == nextNumber || n == nextNumber -1) {
      return 1;
   } else if (n == nextNumber - 2) {
      return 0;
   } else if (n & 1) {
      return 2;
   } else {
      return 1;
   }
}
int main(){
   int n = 10;
   cout << "Numbers to be removed = " <<
   elmentsToBeRemoved(n) << endl;
   return 0;
}

Đầu ra

Khi bạn biên dịch và thực thi chương trình trên. Nó tạo ra kết quả sau -

Numbers to be removed = 1s