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

คูณสองตัวแรกและเลื่อนศูนย์ไปท้ายอาร์เรย์ใน C++

บทนำ

โปรแกรมนี้จะทำสองอย่าง: (1) คูณ 2 กับตัวเลขที่อยู่ติดกันและมีค่าเท่ากัน (2) เลื่อนค่า 0 ทั้งหมดไปอยู่ท้ายอาร์เรย์

ขั้นตอนการแก้ปัญหา

  1. วนลูปตรวจสอบค่าที่ติดกันและเท่ากัน (และไม่ใช่ 0)
  2. ถ้าเจอ ให้คูณ 2 กับตัวแรก และตั้งตัวที่สองเป็น 0
  3. ข้ามตัวถัดไป (เพราะกลายเป็น 0 แล้ว)
  4. หลังจบลูป ให้เลื่อน 0 ทั้งหมดไปท้ายอาร์เรย์

ตัวอย่างโค้ด

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

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

void updateAndRearrangeArray(int arr[], int n) {
    if (n == 1) {
        return;
    }
    for (int i = 0; i < n - 1; i++) {
        if ((arr[i] != 0) && (arr[i] == arr[i + 1])) {
            arr[i] = 2 * arr[i];
            arr[i + 1] = 0;
            i++;
        }
    }
    moveZeroesToEnd(arr, n);
}

void printArray(int arr[], int n) {
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}

int main() {
    int arr[] = { 2, 3, 3, 4, 0, 5, 5, 0 }, n = 7;
    cout << "Given Array: ";
    printArray(arr, n);
    cout << endl;
    updateAndRearrangeArray(arr, n);
    cout << "Updated Array: ";
    printArray(arr, n);
    cout << endl;
    return 0;
}

ผลลัพธ์

Given Array: 2 3 3 4 0 5 5
Updated Array: 2 6 4 10 0 0 0

คำอธิบายผลลัพธ์

  • 3, 3 ติดกัน → คูณ 2 ได้ 6, ตัวที่สองกลายเป็น 0
  • 5, 5 ติดกัน → คูณ 2 ได้ 10, ตัวที่สองกลายเป็น 0
  • 0 ทั้งหมดถูกเลื่อนไปท้าย

สรุป

อัลกอริทึมนี้คล้ายกลไกของเกม 2048 แบบง่ายๆ เหมาะสำหรับฝึกฝนการจัดการอาร์เรย์และ pointer