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

ย้ายศูนย์ทั้งหมดไปท้ายอาร์เรย์ใน C++

โจทย์

ได้รับอาร์เรย์ที่มีหลายศูนย์ เราต้องย้ายศูนย์ทั้งหมดในอาร์เรย์ไปท้ายสุด มาดูตัวอย่างกัน

อินพุต

arr = [4, 5, 0, 3, 2, 0, 0, 0, 5, 0, 1]

เอาต์พุต

4 5 3 2 5 1 0 0 0 0 0

อัลกอริธึม

  • กำหนดอาร์เรย์
  • กำหนดดัชนีเป็น 0
  • วนลูปผ่านอาร์เรย์ที่กำหนด
    • ถ้าองค์ประกอบปัจจุบันไม่ใช่ศูนย์ ให้อัปเดตค่าที่ดัชนีด้วยองค์ประกอบปัจจุบัน
    • เพิ่มดัชนี
  • เขียนลูปที่วนรอบจากดัชนีข้างต้นถึง n
    • อัปเดตองค์ประกอบทั้งหมดเป็น 0

การนำไปใช้งาน

ต่อไปนี้เป็นการนำไปใช้งานของอัลกอริธึมข้างต้นใน C++

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

void moveZeroesToEnd(int arr[], int n) { 
    int index = 0; 
    for (int i = 0; i < n; i++) { 
        if (arr[i] != 0) { 
            arr[index++] = arr[i]; 
        } 
    } 
    while (index < n) { 
        arr[index++] = 0; 
    } 
} 

int main() { 
    int arr[] = {4, 5, 0, 3, 2, 0, 0, 0, 5, 0, 1}; 
    int n = 11; 
    moveZeroesToEnd(arr, n); 
    for (int i = 0; i < n; i++) { 
        cout << arr[i] << " "; 
    } 
    cout << endl; 
    return 0; 
}

ผลลัพธ์

หากคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้

4 5 3 2 5 1 0 0 0 0 0