Hướng dẫn giải của IN HÀNG THEO CHIỀU ĐAN XEN (IHDX.CPP)


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.

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


Đang tải...