Hướng dẫn giải của IN HÀNG THEO CHIỀU ĐAN XEN (IHDX.CPP)
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.
1. Đề bài tóm tắt
Cho một bảng số kích thước m x n (1 <= m, n <= 1000) và một số nguyên dương x (1 <= x <= m). Hãy in các số thuộc hàng x theo quy luật:
- Nếu x là số lẻ: In các số từ trái sang phải.
Nếu x là số chẵn: In các số từ phải sang trái.
Đầu vào (INPUT):
Dòng 1: Hai số nguyên dương m, n.
m dòng tiếp theo: Mỗi dòng chứa n số nguyên mô tả bảng.
Dòng cuối cùng: Số nguyên dương x.
Đầu ra (OUTPUT):
- In ra các số thuộc hàng x theo đúng chiều yêu cầu.
2. Phân tích bài toán
Khai báo mảng 2 chiều tĩnh a[1005][1005] với chỉ số chạy từ 1.
Nhập kích thước m, n và toàn bộ bảng số.
Nhập chỉ số hàng x cần in.
Kiểm tra tính chẵn lẻ của x:
Nếu x % 2 != 0 (x là số lẻ): Chạy biến j từ 1 đến n để in các phần tử a[x][j] từ trái sang phải.
Nếu x % 2 == 0 (x là số chẵn): Chạy biến j từ n giảm về 1 để in các phần tử a[x][j] từ phải sang trái.
3. Độ phức tạp
Thời gian (Time Complexity): O(n) — Chỉ cần duyệt n phần tử trên hàng x.
Không gian (Space Complexity): O(m x n) — Sử dụng mảng 2 chiều tĩnh kích thước tối đa 1005 x 1005.
4. Mã nguồn C++ minh họa
#include <bits/stdc++.h>
using namespace std;
// Khai bao mang 2 chieu tinh voi chi so bat dau tu 1
int a[1005][1005];
int main() {
// Toi uu toc do nhap xuat
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int m, n;
cin >> m >> n;
// Nhap bang so
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
cin >> a[i][j];
}
}
int x;
cin >> x;
// Kiem tra hang x le hay chan
if (x % 2 != 0) {
// Hang le: in tu trai sang phai (tu 1 den n)
for (int j = 1; j <= n; j++) {
cout << a[x][j] << " ";
}
} else {
// Hang chan: in tu phai sang trai (tu n ve 1)
for (int j = n; j >= 1; j--) {
cout << a[x][j] << " ";
}
}
return 0;
}
5. Ví dụ mô phỏng
Input:
3 4
1 6 2 4
6 3 -9 7
-6 5 0 1
2
Quá trình xử lý:
Hàng x = 2 (số chẵn).
Các số trên hàng 2 gốc từ trái sang phải: 6, 3, -9, 7.
In theo chiều ngược lại (từ phải sang trái): 7, -9, 3, 6.
Output:
7 -9 3 6