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