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

Mảng nhị phân sau M dãy hoạt động chuyển đổi?

Ở đây chúng ta sẽ thấy một vấn đề. Chúng tôi có một mảng nhị phân. Nó có n phần tử. Mỗi phần tử sẽ là 0 hoặc 1. Ban đầu, tất cả các phần tử đều bằng 0. Bây giờ chúng ta sẽ cung cấp M lệnh. Mỗi lệnh sẽ chứa các chỉ số bắt đầu và kết thúc. Vì vậy, lệnh (a, b) chỉ ra rằng lệnh sẽ được áp dụng từ phần tử ở vị trí a đến phần tử ở vị trí b. Lệnh sẽ chuyển đổi các giá trị. Vì vậy, nó sẽ chuyển đổi từ chỉ số thể thao sang chỉ số bth. Vấn đề này là đơn giản. kiểm tra thuật toán để có được khái niệm.

Thuật toán

toggleCommand (arr, a, b)

Begin
   for each element e from index a to b, do
      toggle the e and place into arr at its position.
   done
End

Ví dụ

#include <iostream>
using namespace std;
void toggleCommand(int arr[], int a, int b){
   for(int i = a; i <= b; i++){
      arr[i] ^= 1; //toggle each bit in range a to b
   }
}
void display(int arr[], int n){
   for(int i = 0; i<n; i++){
      cout << arr[i] << " ";
   }
   cout << endl;
}
int main() {
   int arr[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
   int n = sizeof(arr)/sizeof(arr[0]);
   display(arr, n);
   toggleCommand(arr, 3, 6);
   toggleCommand(arr, 8, 10);
   toggleCommand(arr, 2, 7);
   display(arr, n);
}

Đầu ra

0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 1 1 1 1 0