ภาพรวม
ได้รับอาร์เรย์จำนวนเต็ม 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