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

โปรแกรม C++ นับจำนวนช่วงบันไดและขั้นบันไดแต่ละช่วง


สมมติว่ามีอาร์เรย์ A ขนาด n อมลปีนบันไดภายในอาคารหลายชั้น ทุกครั้งที่เริ่มปีนช่วงใหม่ จะนับตั้งแต่ 1 ใหม่ เช่น ถ้าปีน 2 ช่วง ช่วงแรก 3 ขั้น ช่วงที่สอง 4 ขั้น เขาจะพูดเลขว่า: 1, 2, 3, 1, 2, 3, 4 ในอาร์เรย์ A เลขเหล่านี้แสดงถึงหมายเลขขั้นที่อมลพูด เราต้องนับจำนวนช่วงบันไดที่เขาปีน และแสดงจำนวนขั้นในแต่ละช่วง

ตัวอย่าง

Input: A = [1, 2, 3, 1, 2, 3, 4, 5]
Output: 2, [3, 5] (2 ช่วงบันได จำนวนขั้นคือ 3 และ 5)

อัลกอริทึม

  1. นับจำนวนครั้งที่เจอเลข 1 ในอาร์เรย์ → ได้จำนวนช่วงบันได
  2. ทุกครั้งที่เจอเลข 1 (ยกเว้นครั้งแรก) ให้บันทึกค่าก่อนหน้า (คือจำนวนขั้นของช่วงก่อนหน้า)
  3. หลังจบลูป ให้บันทึกค่าสุดท้ายของอาร์เรย์ (จำนวนขั้นของช่วงสุดท้าย)

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

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

void solve(vector<int> A) {
    int i, p = 0;
    int n = A.size();
    
    // นับจำนวนช่วงบันได (จำนวนเลข 1)
    for (i = 0; i < n; i++) {
        if (A[i] == 1)
            p++;
    }
    cout << p << endl;
    
    // พิมพ์จำนวนขั้นของแต่ละช่วง
    for (i = 1; i < n; i++) {
        if (A[i] == 1)
            cout << A[i - 1] << ", ";
    }
    cout << A[n - 1];
}

int main() {
    vector<int> A = { 1, 2, 3, 1, 2, 3, 4, 5 };
    solve(A);
}

ผลลัพธ์

2
3, 5