在C++游戏中计算可以减少到零或更小的数字
给定一个包含正数的数组和两个整数 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。
将两个变量 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。如公式所示。
返回 count 作为结果。
示例
#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