Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm số thao tác cần thiết để giảm số lượng đã cho trong C ++


Chúng ta được cung cấp với một số nguyên dương K và một mảng Ops [] chứa các số nguyên. Mục đích là tìm số lượng các phép toán cần thiết để giảm K sao cho nó trở nên nhỏ hơn 0. Các phép toán là -

  • Hoạt động đầu tiên là K + Ops [0], phần tử đầu tiên được thêm vào K

  • Sau 1. Thêm Ops [i] vào K cho đến khi K <0. trong đó chỉ số tôi liên tục thay đổi theo một quy trình vòng tròn .0 <=i

Lưu ý - Tiếp tục thêm Ops [i] cho đến khi K <0. Nếu tôi đến phần tử cuối cùng Ops [N-1] thì bắt đầu lại từ i =0. Theo cách thức vòng tròn.

Đầu tiên chúng ta sẽ kiểm tra xem tổng của tất cả các phần tử của mảng Ops []> 0. Nếu có thì K không bao giờ có thể giảm được. Trả về -1. Nếu không, hãy tiếp tục thêm Ops [i] vào K và kiểm tra xem K <0 nếu có thì ngắt vòng lặp.

Số lượng tăng dần của các hoạt động sau khi cộng:K + Ops [i].

Hãy cùng hiểu với các ví dụ.

Đầu vào -

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

Đầu ra - Đếm số phép toán cần thiết để giảm một số - 3

Giải thích - K là 5. Các phép toán là -

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

Đầu vào -

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

Đầu ra - K giảm được !!

Giải thích −K là 10. Các phép toán là -

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. …………………

Nếu chúng ta sớm kiểm tra tổng tất cả các phần tử của ops [] =5 + 5 + 3-2 =11 và 11 + 10 luôn là + ve. Vì vậy K không thể giảm xuống −0.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Chúng tôi lấy một số nguyên mảng hoạt động [] được khởi tạo bằng các số nguyên ngẫu nhiên.

  • Biến K có giá trị dương.

  • Hàm countOperations (int op [], int n, int k) nhận K Ops mảng [] và độ dài của nó làm tham số và các hoạt động trả về cần thiết để giảm K xuống nhỏ hơn 0.

  • Lấy số lượng phép toán ban đầu đếm được bằng 0.

  • Tính tổng các phần tử của ops [] và lưu trữ trong tổng. Nếu sum> =0 thì trả về -1.

  • Nếu không trong khi k> 0 tiếp tục thêm các hoạt động [i] và số lượng tăng dần. Nếu k <0 vòng lặp ngắt.

  • Kết quả là số lượt trả lại.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Number of operations : 8