计算在C ++中可以减少到零或更少的数字

给定一个正数数组以及两个整数A和B。两个玩家正在玩一个游戏,他们将减少数组中的数字。玩家1可以将数组的任何元素减少A,而玩家2可以将数组的任何元素增加B。目标是找到玩家1可以减少到0或更少的数字计数。第一步。一旦减少到0或更少的数字,玩家2就不会考虑。

例如

输入值

arr[] = { 1,4,5,2 } A=2, B=3
输出结果
在游戏中可以减少到零或更少的数字计数是: 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
输出结果
在游戏中可以减少到零或更少的数字计数是: 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或less.IfA <= B然后我们将检查

  • 即使玩家2将B加到后,所有不大于A的数字。假设此计数为C1。

  • 在玩家2将B加到A之后,所有小于A并大于A的数字。假设此计数为C2。

总计数为C = C1 +(C2 + 1)/ 2。与情况2一样,随着两个玩家同时增加/减少他们,只有一半会减少到0或更少。而玩家2只能将其中一半增加到大于A。与此同时,玩家1会将另一半减少到<= 0。

  • 取一个包含正数的整数数组。

  • 取两个变量A和B。

  • 函数reduce_zero(int arr [],int大小,int A,int B)将返回在游戏中可以减少为零或更少的数字的计数

  • 将初始计数设为0。

  • 将两个变量temp_1和temp_2用作临时计数。

  • 如果A> B,则返回为size的数组的长度。

  • 现在使用for循环遍历数组,对于每个arr [i],如果元素和B <A的总和,则使temp_1递增。

  • 对于每个元素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<<"在游戏中可以减少到零或更少的数字计数是:  "<<reduced_zero(arr, size, A, B);
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出-

在游戏中可以减少到零或更少的数字计数是: 7

猜你喜欢