計算在 C++ 中減少給定數字所需的運算次數


我們得到一個正整數 K 和一個包含整數的陣列 Ops[]。目標是找到將 K 減少到小於 0 所需的運算次數。

  • 第一個操作是 K + Ops[0],將第一個元素新增到 K 中

  • 在 1. 之後,將 Ops[i] 新增到 K 中,直到 K<0。其中索引 i 以迴圈方式不斷變化。0<=i<N。N 是 Ops[] 中整數的數量。

注意 - 持續新增 Ops[i] 直到 K<0。如果 i 達到最後一個元素 Ops[N-1],則再次從 i=0 開始。以迴圈方式。

我們將首先檢查陣列 Ops[] 中所有元素的總和是否 >0。如果是,則 K 永遠無法減少。返回 -1。否則,繼續將 Ops[i] 新增到 K 中並檢查 K<0,如果是,則中斷迴圈。

在加法後遞增操作次數:K+Ops[i]。

讓我們透過示例來理解。

輸入 -

ops[]= { -4,2,-3,0,2 }, K=5

輸出 - 減少數字所需的運算次數 - 3

說明 - K 為 5。操作為 -

1. K+ops[0]= 5+(-4) = 1
2. K+ops[1]= 1+2 = 3
3. K+ops[2]= 3+(-3) = 0

輸入 -

ops[]= { 5,5,3,-2 }, K=10

輸出 - K 無法減少!!

說明 -K 為 10。操作為 -

1. K+ops[0]= 10+5= 15
2. K+ops[1]= 15+5= 20
3. K+ops[2]= 20+3= 23
4. K+ops[3]= 23+-2= 22
5. K+ops[0]= 22+5= 27
6. K+ops[1]= 27+5=32
7. …………………

如果我們提前檢查 ops[] 所有元素的總和=5+5+3-2=11 並且 11+10 始終為正。因此,K 無法減少到 -0。

下面程式中使用的方法如下

  • 我們使用隨機整數初始化一個整數陣列 ops[]。

  • 變數 K 被賦予一個正值。

  • 函式 countOperations(int op[], int n, int k) 以 K 陣列 Ops[] 及其長度作為引數,並返回將 K 減少到小於 0 所需的操作次數。

  • 將初始運算元設為 count 中的 0。

  • 計算 ops[] 元素的總和並存儲在 sum 中。如果 sum>=0,則返回 -1。

  • 如果不是,當 k>0 時,繼續新增 ops[i] 並遞增 count。如果 k<0,則中斷迴圈。

  • 返回 count 作為結果。

示例

 即時演示

#include <bits/stdc++.h>
using namespace std;
long countOperations(int op[], int n, int k){
   long count = 0;
   int sum=0;
   int i=0;
   for(int i=0;i<n;i++){
      sum+=op[i];
   }
   if(sum-k>=0)
      { return -1; } //number k can never be reduced as sum-k is always positive or 0
   while(k>0){
      for(i=0;i<n;i++){
         if(k>0){
            count++;
            k+=op[i];
         }
         else
            { break; }
      }
   }
   return count;
}
int main(){
   int Ops[] = { 1,-1,5,-11};
   int len= sizeof(Ops) / sizeof(Ops[0]);
   int K=10;
   long ans=countOperations(Ops,len,K);
   if(ans==-1)
      { cout<<"K cannot be reduced!!"; }
   else
      { cout<<"Number of operations : "<<ans; }
   return 0;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出 -

Number of operations : 8

更新於: 2020-08-29

228 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告