计算在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 itwill 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
以上是 计算在C ++中可以减少到零或更少的数字 的全部内容, 来源链接: utcz.com/z/337931.html