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

gamein C++에서 0 이하로 줄일 수 있는 수를 세십시오.

<시간/>

양수 배열과 두 개의 정수 A와 B가 주어졌습니다. 두 명의 플레이어가 배열의 숫자를 줄이는 게임을 하고 있습니다. 플레이어 1은 배열의 모든 요소를 ​​A만큼 감소시킬 수 있고 플레이어 2는 배열의 모든 요소를 ​​B만큼 늘릴 수 있습니다. 목표는 플레이어 1이 0 이하로 줄일 수 있는 숫자의 개수를 찾는 것입니다. 첫 번째 플레이어는 선. 0 이하로 감소한 숫자는 플레이어 2에서 고려할 수 없습니다.

예를 들어

입력

arr[] = { 1,4,5,2 } A=2, B=3

출력

Count of numbers that can be reduced to zero or less in a game are: 1

설명

The only number that can be reduced by player 1 is 1 as on first move it
will be reduced to −1. Rest all will become greater than A after player 2 increases their value.

입력

arr[] = { 1,4,5,2 } A=4, B=4

출력

Count of numbers that can be reduced to zero or less in a game are: 2

설명

On first move player 1 reduces 4 to 0. arr[]= [ 1, 0, 5, 2 ]
Player 2 will increase 1 to 4. arr[]= [ 5, 0, 5, 2 ]
Player 1 will decrease 2 to −2. Arr[] = [ 5, 0, 5, −2 ].
From now onwards all numbers are greater than A so cannot be reduced by player 1 to 0 or less as player 2 is also increasing them simultaneously.

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

이 접근 방식에서는 먼저 A>B인지 확인합니다. 그렇다면 N 이동에서 A는 arr[]의 N 요소를 모두 0 이하로 줄입니다. A<=B이면 확인합니다

  • 플레이어 2가 B를 추가한 후에도 A보다 크지 않은 모든 숫자. 이것을 C1이라고 합시다.

  • A보다 작고 플레이어 2가 B를 더한 후 A보다 커지는 모든 숫자. 이것을 C2라고 합시다.

총 개수는 C=C1+ (C2+1)/2입니다. 사례 2와 마찬가지로 두 플레이어가 동시에 증가/감소하므로 그 중 절반만 0 이하로 감소합니다. 그리고 플레이어 2는 그 중 절반만 A 이상으로 늘릴 수 있습니다. 그 동안 플레이어 1은 나머지 절반을 <=0으로 줄입니다.

  • 양수를 포함하는 정수 배열을 가져옵니다.

  • 두 개의 변수 A와 B를 사용합니다.

  • Reduced_zero(int arr[], int size, int A, int B) 함수는 게임에서 0 이하로 줄일 수 있는 숫자의 개수를 반환합니다.

  • 초기 카운트를 0으로 합니다.

  • 임시 카운트로 두 개의 변수 temp_1 및 temp_2를 사용합니다.

  • A> B이면 크기인 배열의 길이를 반환합니다.

  • 이제 for 루프를 사용하여 배열을 순회합니다. 각 arr[i]에 대해 요소의 합과 B

  • 각 요소 arr[i] <=A에 대해 temp_2를 증가시킵니다.

  • 이제 for 루프가 끝난 후 count=temp_1+ (temp_2+1)/2를 취합니다. 공식에 주어진 대로.

  • 결과로 카운트를 반환합니다.

예시

#include <bits/stdc++.h>
using namespace std;
int reduced_zero(int arr[], int size, int A, int B){
   int count = 0;
   int temp_1 = 0, temp_2 = 0;
   if (A > B){
      return size;
   }
   for(int i = 0; i < size; i++){
      if (A >= arr[i] + B){
         temp_1++;
      }
      else if(A >= arr[i]){
         temp_2++;
      }
   }
   int temp = (temp_2 + 1) / 2;
   count = temp + temp_1;
   return count;
}
int main(){
   int arr[] = { 3, 3, 1, 2, 4, 7, 1};
   int A = 4, B = 1;
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of numbers that can be reduced to zero or less in a game are:  "<<reduced_zero(arr, size, A, B);
   return 0;
}

출력

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

Count of numbers that can be reduced to zero or less in a game are: 7