Hướng dẫn giải của LIST03: Các số lẻ đã sắp xếp
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 in ra số lượng các số lẻ và chính các số lẻ đó theo thứ tự tăng dần.
Cách làm
Chương trình gom các số lẻ vào mảng ~b~, đếm luôn số lượng ~m~. Sau đó sắp xếp mảng ~b~ tăng dần bằng hai vòng for lồng nhau: nếu hai số đứng sai thứ tự thì đổi chỗ.
- Bước 1: Đọc ~n~ và các số. Với mỗi số lẻ, thêm vào mảng ~b~ và tăng ~m~.
- Bước 2: Sắp xếp ~b_0 \ldots b_{m-1}~ tăng dần.
- Bước 3: In ~m~ ở dòng đầu, các số trong ~b~ ở dòng thứ hai.
Bẫy: số lẻ âm có số dư khác 0 khi chia cho 2, nên điều kiện ~x \% 2 \ne 0~ vẫn đúng với chúng.
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int a[1005];
// b chứa các số lẻ, m là số lượng số lẻ
int b[1005];
int m = 0;
for (int i = 0; i < n; i++) {
cin >> a[i];
// Số lẻ khác số chẵn ở chỗ chia 2 có số dư khác 0
if (a[i] % 2 != 0) {
b[m] = a[i];
m++;
}
}
// Sắp xếp các số lẻ tăng dần bằng cách đổi chỗ hai số sai thứ tự
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;
}
}
}
cout << m << "\n";
for (int i = 0; i < m; i++) {
cout << b[i] << " ";
}
cout << "\n";
return 0;
}
Bình luận