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

Số một liên tiếp tối đa (hoặc số không) trong một mảng tròn nhị phân trong C ++

Chúng tôi được cung cấp với một mảng tròn. Mảng tròn là mảng mà chúng ta xem xét trường hợp phần tử đầu tiên đứng sau phần tử cuối cùng. Nó được sử dụng để triển khai hàng đợi. Vì vậy, chúng ta phải đếm số không tối đa. trong số 1 hoặc 0 liên tiếp trong mảng đó.

Hãy cùng hiểu với các ví dụ.

Đầu vào - Arr [] ={1,1,0,1,0,1,0,1,1,1}

Đầu ra - Số 1 liên tiếp tối đa là 5. Hoặc Số 0 liên tiếp tối đa là 1.

Giải thích - Từ Arr [] chỉ mục 7 đến 9 và sau đó chỉ mục 0 và 1. 1 là 5. Không có 0 liên tiếp mà là 1.

Đầu vào - Arr [] ={0,0,0,1,0}

Đầu ra - 1 lần liên tiếp tối đa là 1. Hoặc các số 0 liên tiếp tối đa là 4.

Giải thích - Từ Arr [] chỉ mục 4 và sau đó chỉ mục 0 đến 3. 0 là 4.

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

  • Chúng tôi lấy một Arr [] đầu vào chứa các chữ cái 0 và 1 theo thứ tự ngẫu nhiên.

  • Biến N được sử dụng cho kích thước của Arr [].

  • Bit được sử dụng để lưu trữ 1 hoặc 0, theo đó chúng tôi sẽ đếm.

  • Hàm maxConsaries (int arr [], int n, int bit) nhận ba tham số đầu vào. Bản thân mảng, kích thước của nó và 0 hoặc 1 dưới dạng bit. Trả về số lượng bit trong quá khứ.

  • Để làm cho mảng tròn. Temp [2 * n] được sử dụng để lưu trữ arr [] hai lần trong đó. Vòng lặp while () chạy hai lần để sao chép arr [] vào tạm thời.

  • Bây giờ chúng ta sẽ đếm 1 (hoặc 0) liên tiếp bằng cách sử dụng while (temp [k ++] ==bit) và lưu trữ số đếm liên tiếp trong biến "count".

  • Nếu số lượng này là tối đa được tìm thấy cho đến nay, hãy lưu trữ nó ở maxC.

  • Trả về maxC dưới dạng kết quả cuối cùng.

Ví dụ

#include <iostream>
//to return maximum bishops possible
int maxConsecutive(int arr[],int n,int bit){
   int count=0;
   int temp[2*n]={0};
   int maxC=0;
   int j=0,k=0; //to twice copy arr[]
   while(j<2){
      for(int i=0;i<n;i++){
         temp[k++]=arr[i];
      }
      j++;
   }
   k=0;
   for(int i=0;i<2*n; i++){
      count=0;
      while(temp[k++]==bit){
         ++count;
      }
      if(maxC<count)
         maxC=count;
   }
   return maxC;
}
int main(){
   int Arr[]={1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1 };
   int N = 12;
   int bit=1;
   printf("Maximum Consecutive 1's in circular array: %d",maxConsecutive(Arr,N,bit));
   bit=0;
   printf("\nMaximum Consecutive 0's in circular array: %d",maxConsecutive(Arr,N,bit));
   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 -

Maximum Consecutive 1's in circular array: 6
Maximum Consecutive 0's in circular array: 2