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

โค้ด C++ หาจำนวนหินต่ำสุดหลังดำเนินการทั้งหมด

สมมติว่าเรามีสตริง S ที่มี n ตัวอักษร ตัวอักษรจะเป็น '+' หรือ '-' มีกองหิน n ครั้งเราเอาหินออกหรือใส่เข้าไป กองหินไม่ว่างก่อนการเอาหินออกทุกครั้ง เราต้องหาจำนวนหินน้อยที่สุดที่เป็นไปได้ในกองหลังดำเนินการทั้งหมด ถ้าเอาหินในครั้งที่ i S[i] = "-" ถ้าใส่ S[i] = "+"

เช่น ถ้าอินพุตคือ S = "++-++" เอาต์พุตจะเป็น 3 ถ้าเริ่มต้น 0 ลูกหลังดำเนินการจะได้ 3 ลูก

ขั้นตอนการแก้ปัญหา

n := ขนาดของ S
for i := 0 ถึง n-1:
    res := (ถ้า S[i] == '-' แล้ว max(res - 1, 0) มิฉะนั้น res + 1)
return res

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

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

int solve(string S) {
    int n = S.size(), res = 0;
    for (int i = 0; i < n; i++)
        res = (S[i] == '-') ? max(res - 1, 0) : res + 1;
    return res;
}

int main() {
    string S = "++-++";
    cout << solve(S) << endl;
}

อินพุต

"++-++"

เอาต์พุต

3