计算减少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始终为+ ve。因此,K不能减小到-0。

以下程序中使用的方法如下

  • 我们采用用随机整数初始化的整数数组ops []。

  • 变量K给出一个正值。

  • 函数countOperations(int op [],int n,int k)将K数组Ops []及其长度作为参数,并将K减小到小于0所需的返回操作。

  • 将初始操作数计为0。

  • 计算ops []元素的总和并存储在总和中。如果sum> = 0,则返回-1。

  • 如果不是,而k> 0,则继续添加ops [i]和递增计数。如果k <0,则中断循环。

  • 返回计数作为结果。

示例

#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