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 次瀏覽

啟動你的 事業

完成課程,獲得認證

開始
廣告