เราได้รับอาร์เรย์ และมีงานให้ลบศูนย์นำหน้า (leading zeros) ออกจากอาร์เรย์ที่กำหนด แล้วพิมพ์อาร์เรย์
Input : arr[] = {0, 0, 0, 1, 2, 3}
Output : 1 2 3
Input : arr[] = {0, 0, 0, 1, 0, 2, 3}
Output : 1 0 2 3
เราสามารถสร้างอาร์เรย์ใหม่ที่ไม่มีศูนย์นำหน้าของอาร์เรย์เดิมได้
แนวทางแก้ปัญหา
ในวิธีนี้ เราจะเดินผ่านอาร์เรย์และใส่ตัวเลขทั้งหมดยกเว้นศูนย์นำหน้า
ตัวอย่างโค้ด
#include <iostream>
using namespace std;
int main() {
int arr[] = {0, 0, 0, 1, 2, 0, 4};
int n = sizeof(arr) / sizeof(int); // ขนาดอาร์เรย์ที่กำหนด
int last = -1;
for (int i = 0; i < n; i++) { // หาสมาชิกแรกที่ไม่ใช่ศูนย์
if (arr[i] != 0) {
last = i;
break;
}
}
if (last == -1)
cout << "Empty\n";
else {
int b[n - last]; // อาร์เรย์ใหม่
for (int i = last; i < n; i++) // ใส่สมาชิกในอาร์เรย์ใหม่
b[i - last] = arr[i];
for (int i = 0; i < n - last; i++) // พิมพ์อาร์เรย์
cout << b[i] << " ";
}
}
ผลลัพธ์
1 2 0 4
คำอธิบายโค้ด
ในโปรแกรมนี้ เราเดินผ่านอาร์เรย์ arr หาดัชนีของสมาชิกแรกที่ไม่ใช่ศูนย์ เก็บไว้ในตัวแปร last หาก last ยังคงเป็น -1 หลังเดินครบ แสดงว่าอาร์เรย์ประกอบด้วยแต่ศูนย์ พิมพ์ "Empty"
เมื่อได้ดัชนีแรกที่ไม่ใช่ศูนย์ เราสามารถกำหนดขนาดอาร์เรย์ใหม่ได้คือ (n - last) จากนั้นวนลูปจาก last ถึง n-1 ใส่สมาชิกเหล่านี้ในอาร์เรย์ใหม่และพิมพ์
สรุป
ในบทความนี้ เราแก้ปัญหาการลบศูนย์นำหน้าจากอาร์เรย์ เรียนรู้โปรแกรม C++ และแนวทางการแก้ปัญหา สามารถเขียนในภาษาอื่นได้เช่น C, Java, Python หวังว่าจะเป็นประโยชน์