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

ย้ายศูนย์ทั้งหมดไปหน้าและ 1 ไปท้ายในอาร์เรย์จำนวนเต็มสุ่มใน C++

โจทย์

ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่ย้ายศูนย์ทั้งหมดไปหน้าและ 1 ทั้งหมดไปท้ายของอาร์เรย์

ได้รับอาร์เรย์ที่มีศูนย์และ 1 รวมกับจำนวนเต็มสุ่ม เราต้องย้ายศูนย์ทั้งหมดไปเริ่มต้นและ 1 ทั้งหมดไปท้ายสุดของอาร์เรย์ มาดูตัวอย่างกัน

อินพุต

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

เอาต์พุต

0 0 0 0 4 5 2 3 1 1 1 1

อัลกอริธึม

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

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

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

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

void update1And0Positions(int arr[], int n) { 
    int index = 0; 
    for (int i = 0; i < n; i++) { 
        if (arr[i] != 1) { 
            arr[index++] = arr[i]; 
        } 
    } 
    while (index < n) { 
        arr[index++] = 1; 
    } 
    index = 0; 
    for (int i = n - 1; i >= 0; i--) { 
        if (arr[i] == 1) { 
            continue; 
        } 
        if (!index) { 
            index = i; 
        } 
        if (arr[i] != 0) { 
            arr[index--] = arr[i]; 
        } 
    } 
    while (index >= 0) { 
        arr[index--] = 0; 
    } 
} 

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

ผลลัพธ์

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

0 0 0 0 4 5 2 3 1 1 1 1