C++ 代码,通过武器来寻找杀死敌人的最小移动次数


假设我们有一个包含 n 个元素的数组 A,以及另一个数字 H。H 是敌人的生命值。我们有 n 种武器,第 i 种武器的伤害值为 A[i]。可以使用不同的武器来杀死敌人。我们不能连续两次使用同一把武器。我们必须计算出可以使用武器杀死敌人的最少次数。

因此,如果输入如下:A = [2, 1, 7];H = 11,则输出将为 3,因为如果我们使用伤害值为 7 的武器,然后使用 2,再使用 7,我们就能杀死敌人。

步骤

要解决这个问题,我们将遵循以下步骤 -

sort the array A
n := size of A
x := (A[n - 1] + A[n - 2])
return H / x * 2 + (H mod x + A[n - 1] - 1) / A[n-1]

示例

让我们看看以下实现,以获得更好的理解 -

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A, int H){
   sort(A.begin(), A.end());
   int n = A.size();
   int x = (A[n - 1] + A[n - 2]);
   return H / x * 2 + (H % x + A[n - 1] - 1) / A[n - 1];
}
int main(){
   vector<int> A = { 2, 1, 7 };
   int H = 11;
   cout << solve(A, H) << endl;
}

输入

{ 2, 1, 7 }, 11

输出

3

更新于:15-Mar-2022

499 次浏览

启动你的 事业

完成课程,获得认证

开始
广告
© . All rights reserved.