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

โค้ด C++ นับจำนวนบทที่อ่านไม่จบ

สมมติว่าเรามีอาร์เรย์คู่ P โดย P[i] เป็น (l, r) และตัวเลข k พิจารณาว่าอ่านหนังสือ n บท แต่ละหน้าอยู่ในบทเดียว แต่ละบทมีอย่างน้อย 1 หน้า อ่านบางหน้า และทำเครื่องหมายหน้า k เป็นหน้าแรกที่ยังไม่ได้อ่าน ต้องหาจำนวนบทที่ยังอ่านไม่จบ P[i] คือช่วงหน้าของบท

เช่น ถ้าอินพุตคือ P = [[1, 3], [4, 7], [8, 11]]; k = 4 เอาต์พุตจะเป็น 2 เพราะอ่านบทแรกจบ อีก 2 บทยังอ่านไม่จบ

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

n := ขนาดของ P
for i := 1 ถึง n:
    if k >= P[i-1, 0] และ k <= P[i-1, 1]:
        return n - i + 1
return 0

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

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

int solve(vector<vector<int>> P, int k) {
    int n = P.size();
    for (int i = 1; i <= n; i++) {
        if (k >= P[i - 1][0] && k <= P[i - 1][1])
            return n - i + 1;
    }
    return 0;
}

int main() {
    vector<vector<int>> P = { { 1, 3 }, { 4, 7 }, { 8, 11 } };
    int k = 4;
    cout << solve(P, k) << endl;
}

อินพุต

{ { 1, 3 }, { 4, 7 }, { 8, 11 } }, 4

เอาต์พุต

2