C++ 中穿過街道所需的最低初始能量


假設我們有一個數組,其中儲存了正負數。該陣列表示從一條街道的一端到另一端的檢查點。正負數表示檢查點的能量。正值可增加能量,負值可減少能量。我們必須找到穿越街道所需的初始能量級,這樣能量級永遠不會變為 0 或低於 0。

假設我們有一個數組 A = {4, -6, 2, 3}。將初始能量設為 0。因此,到達第一個檢查點後,能量為 4。現在,要到達第二個檢查點,能量將為 4 + (-6) = -2。因此能量小於 0。因此我們必須以 3 開始旅程。第一項之後,它將變為 3 + 4 = 7,到達第二個檢查點之後,它將變為 7 + (-6) = 1。

演算法

minInitEnergy(arr, n):
begin
   initEnergy := 0
   currEnergy := 0
   flag := false
   for i in range 0 to n, do
      currEnergy := currEnergy + arr[i]
      if currEnergy <= 0, then
         initEnergy := initEnergy + absolute value of currEnergy + 1
         currEnergy := 1
         flag := true
      end if
   done
   if flag is false, return 1, otherwise return initEnergy
end

範例

 實際演示

#include <iostream>
#include <cmath>
using namespace std;
int minInitEnergy(int arr[], int n){
   int initEnergy = 0;
   int currEnergy = 0;
   bool flag = false;
   for (int i = 0; i<n; i++){
      currEnergy = currEnergy + arr[i];
      if (currEnergy <= 0){
         initEnergy = initEnergy + abs(currEnergy) + 1;
         currEnergy = 1;
         flag = true;
      }
   }
   if (flag == false)
      return 1;
   else
      return initEnergy;
}
int main() {
   int A[] = {4, -6, 2, 3};
   int n = sizeof(A)/sizeof(A[0]);
   cout << "Minimum Energy: " << minInitEnergy(A, n);
}

輸出

Minimum Energy: 3

更新於:2019 年 9 月 25 日

373 次瀏覽

開啟您的職業生涯

完成課程即可獲得認證

立即開始
廣告
© . All rights reserved.