สมมติว่าเรามีอาร์เรย์ A ที่มี n องค์ประกอบ มานั่น อมลปีนบันไดภายในอาคารหลายชั้น ทุกครั้งที่ปีน เริ่มนับจาก 1 เช่น ถ้าเขาปีน 2 ช่วงบันได 3 ขั้นและ 4 ขั้น เขาจะพูดตัวเลข 1, 2, 3, 1, 2, 3, 4 ในอาร์เรย์ A ตัวเลขแทนหมายเลขขั้นที่อมลพูด เราต้องนับจำนวนช่วงบันไดที่เขาปีน และพิมพ์จำนวนขั้นในแต่ละช่วงบันได
เช่น ถ้าค่าที่ป้อนเข้าเป็น A = [1, 2, 3, 1, 2, 3, 4, 5] ผลลัพธ์จะได้ 2, [3, 5]
ขั้นตอนการแก้ปัญหา
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้:
p = 0 n := ขนาดของ A สำหรับ i := 0 เมื่อ i < n เพิ่ม i ทีละ 1 ทำ: ถ้า A[i] เท่ากับ 1 แล้ว: (เพิ่ม p ขึ้น 1) พิมพ์ p สำหรับ i := 1 เมื่อ i < n เพิ่ม i ทีละ 1 ทำ: ถ้า A[i] เท่ากับ 1 แล้ว: พิมพ์ A[i - 1] พิมพ์ A[n - 1]
ตัวอย่างโค้ด
ดูการนำไปใช้จริงด้านล่างเพื่อความเข้าใจที่ดียิ่งขึ้น:
#include <bits/stdc++.h> using namespace std; void solve(vector<int> A) { int i, p = 0; int n = A.size(); 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); }
ข้อมูลนำเข้า
{ 1, 2, 3, 1, 2, 3, 4, 5 }
ข้อมูลส่งออก
2 3, 5