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

C++에서 주어진 단위 및 b를 사용하여 교차할 수 있는 최대 요소

<시간/>

주어진 바이너리 배열 arr[] 및 두 개의 변수 ab 일부 초기 값으로. arr[] 배열의 요소를 교차하려면 두 가지 방법이 있습니다 -

  • arr[i] ==1이면 a에서 1단위를 사용할 수 있습니다. , b 변경 없음 . b에서 1단위를 사용하는 경우 , 다음 1 단위 증가합니다. (참고로 의 값은 원래 값보다 증가할 수 없습니다.)

  • arr[i] ==0이면 a에서 1단위를 사용할 수 있습니다. 또는 b .

이제 예제를 사용하여 무엇을 해야 하는지 이해합시다 -

입력

arr[] = {0, 0, 0, 1, 1}, a = 2, b = 2

출력

5

설명

1 st 를 건너려면 요소, a에서 1개 사용 (a =1, b =2).

2 nd 를 건너려면 요소, a에서 1개 사용 (a =0, b =2).

3 번째 교차 요소, b에서 1단위 사용 (a =0, b =1).

4 번째 를 넘기 위해 요소, b에서 1단위 사용 a 증가 1단위(a =1, b =0).

5 번째 를 넘기 위해 요소, a에서 1개 사용 (a =0, b =0).

따라서 모든 요소를 ​​교차하여 출력이 5가 됩니다.

입력

arr[] = {1, 1, 1, 0, 1}, a = 1, b = 2

출력

4

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

  • MaxElements() 함수에서 변수 초기화 Oa =0 및 최대 =0, int를 입력하여 각각의 원래 값과 최종 답변을 저장합니다.

  • i =0에서 i

  • 먼저 둘 다 a인지 확인합니다. 및 b 0과 같으면 루프에서 벗어납니다.

  • 그렇지 않으면 (a ==0)인지 확인하고 그렇다면 현재 요소 =1인지 확인하고 b에서 1을 빼서 해당 요소를 교차하고 a =min(Oa, a + 1)을 넣어 a가 원래 값을 초과하지 않도록 합니다. 가치.

    그렇지 않으면 영향을 주지 않고 b에서 1을 빼면 됩니다.

  • 그렇지 않으면 (b ==0)인지 확인하고 그렇다면 a에서 1을 뺍니다.

  • 그렇지 않으면 (arr[i] ==1 &&a

  • 그렇지 않으면 단순히 1을 빼고 최대를 증가시킵니다. .

  • 루프 외부에서 최대를 반환합니다. .

#include <bits/stdc++.h>
using namespace std;
int MaxElements(int arr[], int a, int b, int size){
   // Oa will have original value of a
   int Oa = a;
   int max = 0;
   // Iterate in the binary array
   for (int i = 0; i < size; i++){
      // Break loop if a and b, both are = 0
      if (a == 0 && b == 0)
         break;
      // If a is not present, use b
      else if (a == 0){
         //increase a by 1 if arr[i] == 1
         if (arr[i] == 1){
            b -= 1;
            //Checking if original value is not exceeded
            a = min(Oa, a + 1);
         }
         else
            b -= 1;
      }
      // If b is not present, use a
      else if (b == 0)
         a--;
         // if arr[i] == 1,use b
      else if (arr[i] == 1 && a < Oa){
         b -= 1;
         a = min(Oa, a + 1);
      }
      else
         a--;
         max++;
   }
   return max;
}
//main function
int main(){
   int arr[] = { 1, 1, 1, 0, 1 };
   int size = sizeof(arr) / sizeof(arr[0]);
   int a = 1;
   int b = 2;
   cout << MaxElements(arr, a, b, size);
   return 0;
}

출력

4