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

จัดเรียงค่าคี่และคู่สลับกันตามลำดับขึ้นใน C++

ภาพรวม

ได้รับอาร์เรย์จำนวนเต็ม arr[] มีทั้งบวกและลบ งานคือจัดเรียงอาร์เรย์ใหม่ โดยหากอิลิเมนต์น้อยที่สุดเป็นเลขคี่ ให้จัดเรียงแบบ คี่-คู่-คี่-คู่... หากน้อยที่สุดเป็นเลขคู่ ให้จัดเรียงแบบ คู่-คี่-คู่-คี่... หากจำนวนคี่/คู่มากกว่าคู่/คี่ ให้เติม 0 ไปในตำแหน่งที่ขาด

ตัวอย่าง

อินพุต − int arr[] = {1, 1, 2, 2, 5, 4}

เอาต์พุต − Rearrangement of Odd and Even values in Alternate Fashion in Ascending Order is: 1 2 1 2 5 4

คำอธิบาย − อิลิเมนต์น้อยที่สุดคือ 1 (คี่) จัดเรียงแบบ คี่-คู่-คี่-คู่ ได้ 1 2 1 2 5 4

อินพุต − int arr[] = {6, 3, 2, 8, 10, 4}

เอาต์พุต − Rearrangement of Odd and Even values in Alternate Fashion in Ascending Order is: 2 3 4 0 6 0

คำอธิบาย − อิลิเมนต์น้อยที่สุดคือ 2 (คู่) จัดเรียงแบบ คู่-คี่-คู่-คี่ แต่คี่มีน้อยกว่า จึงเติม 0

แนวทางการแก้ปัญหา

  • รับอาร์เรย์ คำนวณขนาด
  • เรียงลำดับอาร์เรย์ด้วย sort() ของ STL
  • เรียก Rearrangement(arr, size)
  • ภายในฟังก์ชัน:
    • สร้าง vec_1 (เลขคู่) และ vec_2 (เลขคี่)
    • แยกอิลิเมนต์เข้า vector ตามคี่/คู่
    • ตัวแปร temp=0, check=false
    • หาก arr[0] % 2 == 0 ตั้ง check=true (เริ่มจากคู่)
    • while temp < size:
      • หาก check ใช่: arr[temp++] = vec_1[i++]; check = !check;
      • มิฉะนั้น: arr[temp++] = vec_2[j++]; check = !check;
  • พิมพ์ผลลัพธ์

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

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

void Rearrangement(int arr[], int size){ 
    vector<int> vec_1, vec_2; 
    int temp = 0; 
    bool check = false; 
    for(int i = 0; i < size; i++){ 
        if(arr[i] % 2 == 0){ 
            vec_1.push_back(arr[i]); 
        } else { 
            vec_2.push_back(arr[i]); 
        } 
    } 
    int i = 0; 
    int j = 0; 
    if(arr[0] % 2 == 0){ 
        check = true; 
    } 
    while(temp < size){ 
        if(check == true){ 
            arr[temp++] = vec_1[i++]; 
            check = !check; 
        } else { 
            arr[temp++] = vec_2[j++]; 
            check = !check; 
        } 
    } 
} 

int main(){ 
    int arr[] = {1, 1, 2, 2, 5, 4}; 
    int size = sizeof(arr) / sizeof(int); 
    sort(arr, arr + size); 
    cout << "Rearrangement of Odd and Even values in Alternate Fashion in Ascending Order is: "; 
    Rearrangement(arr, size); 
    for(int i = 0; i < size; i++){ 
        cout << arr[i] << " "; 
    } 
    return 0; 
}

ผลลัพธ์

Rearrangement of Odd and Even values in Alternate Fashion in Ascending Order is: 1 2 1 2 5 4