Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 이진 순환 배열에서 최대 연속 1(또는 0)

<시간/>

원형 배열이 제공됩니다. 원형 배열은 첫 번째 요소가 마지막 요소 옆에 오는 경우를 고려하는 배열입니다. 큐를 구현하는 데 사용됩니다. 그래서 우리는 최대 수를 계산해야합니다. 해당 배열의 연속 1 또는 0 중

예를 들어 이해합시다.

입력 - Arr[] ={ 1,1,0,1,0,1,0,1,1,1 }

출력 − 최대 연속 1은 5입니다. 또는 최대 연속 0은 1입니다.

설명 − Arr[] 인덱스 7에서 9, 인덱스 0과 1. 1은 5입니다. 연속적인 0은 없고 1입니다.

입력 - Arr[] ={ 0,0,0,1,0 }

출력 − 최대 연속 1은 1입니다. 또는 최대 연속 0은 4입니다.

설명 − Arr[] 인덱스 4부터 인덱스 0부터 3까지. 0은 4입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 무작위 순서로 0과 1을 포함하는 Arr[] 입력을 받습니다.

  • 변수 N은 Arr[]의 크기에 사용됩니다.

  • 비트는 1 또는 0을 저장하는 데 사용되며 이에 따라 계산됩니다.

  • maxConsecutive(int arr[], int n, int bit) 함수는 세 개의 입력 매개변수를 취합니다. 배열 자체, 크기 및 0 또는 1을 비트로 표시합니다. 지난 비트 수를 반환합니다.

  • 배열을 원형으로 만들기 위해. Temp[2*n]은 arr[]을 두 번 저장하는 데 사용됩니다. while() 루프가 두 번 실행되어 r[]을 임시로 복사합니다.

  • 이제 while( temp[k++]==bit )을 사용하여 연속적인 1(또는 0)을 계산하고 변수 'count'에 연속된 수를 저장합니다.

  • 이 개수가 지금까지 발견된 최대값이면 maxC에 저장합니다.

  • maxC를 최종 결과로 반환합니다.

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

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다 -

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