Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับจำนวนการดำเนินการเพื่อลดค่าตัวเลขให้น้อยกว่า 0 ใน C++

ได้รับจำนวนเต็มบวก K และอาร์เรย์ Ops[] เป้าหมายคือหาจำนวนการดำเนินการที่ต้องทำเพื่อให้ K < 0

กติกาการดำเนินการ

  1. การดำเนินการครั้งแรก: K + Ops[0]
  2. ต่อไป: บวก Ops[i] ต่อเนื่องedly โดย i วิ่งแบบวนรอบ (circular) 0 ≤ i < N จนกว่า K < 0

ข้อสังเกตสำคัญ

ถ้าผลรวมของ Ops[] ≥ 0 แล้ว K จะไม่มีวันน้อยกว่า 0 → คืนค่า -1

ตัวอย่าง

อินพุต: ops[] = {-4, 2, -3, 0, 2}, K = 5

เอาต์พุต: 3

ขั้นตอน: 5+(-4)=1, 1+2=3, 3+(-3)=0 (ยังไม่ <0) ต่อไป...

อินพุต: ops[] = {5, 5, 3, -2}, K = 10

เอาต์พุต: K cannot be reduced!! (ผลรวม ops = 11 > 0)

ตัวอย่างโค้ด C++

#include <bits/stdc++.h>
using namespace std;

long countOperations(int op[], int n, int k) {
    long count = 0;
    int sum = 0;
    for (int i = 0; i < n; i++) sum += op[i];
    if (sum >= 0) return -1; // K ไม่มีวันลดลง

    while (k > 0) {
        for (int 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