Hướng dẫn giải của LIST07: Sắp xếp các số chẵn
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng dẫn giải
Cho dãy ~n~ số nguyên. Hãy sắp xếp các số chẵn tăng dần, còn các số lẻ giữ nguyên vị trí của chúng trong dãy.
Cách làm
Ý tưởng: lấy riêng các số chẵn ra một mảng, sắp xếp mảng đó, rồi đặt lại vào đúng các vị trí chẵn trong dãy gốc theo thứ tự.
- Bước 1: Đọc dãy ~a~. Với mỗi số chẵn, thêm vào mảng ~b~ và tăng ~m~.
- Bước 2: Sắp xếp ~b~ tăng dần bằng hai vòng
forlồng nhau. - Bước 3: Duyệt lại ~a~ bằng biến ~j~ trỏ vào ~b~. Gặp số chẵn ở vị trí nào thì thay bằng ~b_j~ và tăng ~j~. Số lẻ không đổi.
- Bước 4: In dãy ~a~.
Bẫy: số 0 là số chẵn, nên cũng được đưa vào sắp xếp.
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int a[1005];
// b chứa các số chẵn, m là số lượng số chẵn
int b[1005];
int m = 0;
for (int i = 0; i < n; i++) {
cin >> a[i];
if (a[i] % 2 == 0) {
b[m] = a[i];
m++;
}
}
// Sắp xếp các số chẵn tăng dần
for (int i = 0; i < m; i++) {
for (int j = i + 1; j < m; j++) {
if (b[i] > b[j]) {
int tam = b[i];
b[i] = b[j];
b[j] = tam;
}
}
}
// Đặt lại các số chẵn đã sắp xếp vào đúng vị trí số chẵn cũ, số lẻ giữ nguyên
int j = 0;
for (int i = 0; i < n; i++) {
if (a[i] % 2 == 0) {
a[i] = b[j];
j++;
}
}
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << "\n";
return 0;
}
Bình luận