计算减少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(intop[],intn,intk)将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