KH_WEB_CB_2026_01

KH_DSA_C_2026_01

KH_TT_CB_2026_01

KH_OOP_C_SHARP_2026_01

C

Tìm số lớn nhất trong dãy số

bởi Phạm Xuân Hoài - 11 tháng 1, 2026

Tìm số lớn nhất trong dãy số

1️⃣ Đọc đề và phân tích yêu cầu

Bài toán yêu cầu:

  • Nhập T bộ test

  • Với mỗi test:

    • Nhập số phần tử N
    • Nhập N số nguyên dương
  • Cần in ra:

    • Giá trị lớn nhất trong dãy
    • Các vị trí (index từ 0) có giá trị bằng số lớn nhất

📌 Lưu ý quan trọng:

  • Một dãy có thể có nhiều số lớn nhất
  • Chỉ số tính từ 0, không phải từ 1

2️⃣ Lên ý tưởng đơn giản

Thay vì viết tất cả trong main, ta chia bài toán thành các bước rõ ràng:

🔹 Bước 1: Nhập mảng

→ Viết hàm riêng để nhập dữ liệu cho gọn và dễ đọc

🔹 Bước 2: Tìm giá trị lớn nhất

→ Duyệt mảng, so sánh từng phần tử để tìm max

🔹 Bước 3: In các vị trí có giá trị lớn nhất

→ Duyệt lại mảng, phần tử nào bằng max thì in ra vị trí

👉 Mỗi hàm chỉ làm đúng một nhiệm vụ, giúp code:

  • Dễ hiểu
  • Dễ sửa
  • Dễ mở rộng

3️⃣ Cài đặt chương trình

📌 Khai báo các hàm

void nhapMang(int n, int a[n]);
int timMaxMang(int n, int a[n]);
void inViTriMaxMang(int n, int a[n], int max);

📌 Hàm main

int main() {
    int T;
    scanf("%d", &T);

    while(T--) {
        int n;
        scanf("%d", &n);

        int a[n];
        nhapMang(n, a);

        int max = timMaxMang(n, a);
        printf("%d\n", max);

        inViTriMaxMang(n, a, max);
        printf("\n");
    }

    return 0;
}

🔎 Giải thích nhanh:

  • while(T--): xử lý lần lượt từng test
  • Mỗi test có mảng riêng
  • Tìm max trước, sau đó mới in vị trí

📌 Hàm nhập mảng

void nhapMang(int n, int a[n]) {
    for(int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }
}

👉 Tách riêng hàm giúp main() gọn và dễ đọc hơn.


📌 Hàm tìm giá trị lớn nhất

int timMaxMang(int n, int a[n]) {
    int max = a[0];
    for(int i = 1; i < n; i++) {
        max = a[i] > max ? a[i] : max;
    }
    return max;
}

🧠 Ý tưởng:

  • Giả sử phần tử đầu tiên là lớn nhất
  • So sánh lần lượt các phần tử còn lại
  • Cập nhật max khi gặp giá trị lớn hơn

📌 Hàm in vị trí các phần tử lớn nhất

void inViTriMaxMang(int n, int a[n], int max) {
    for(int i = 0; i < n; i++) {
        if(a[i] != max) {
            continue;
        }
        printf("%d ", i);
    }
}

👉 Chỉ cần kiểm tra:

  • Nếu a[i] == max → in ra vị trí i

4️⃣ Tổng kết

✔️ Bài toán được giải bằng:

  • Mảng 1 chiều
  • Vòng lặp for
  • Hàm trong C

✔️ Cách chia hàm giúp:

  • Code rõ ràng
  • Dễ học cho người mới
  • Phù hợp thi contest & học thuật

📌 Đây là bài nền tảng rất quan trọng, có thể mở rộng sang:

  • Đếm số lần xuất hiện
  • Tìm số lớn thứ 2
  • Xử lý mảng nâng cao hơn

💬 Nếu bạn mới học C, hãy thử viết lại bài này mà không nhìn code — đó là cách học nhanh nhất! 🚀


📌 Thử thách: Error404-Labs - Học Lập Trình - C04005 - SỐ LỚN NHẤT - Mảng một chiều