计算在 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 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告