Mô tả bài toán
Chương trình yêu cầu người dùng nhập 4 số nguyên từ bàn phím, sau đó tìm ra số nhỏ nhất và số lớn nhất trong 4 số đó.
Giải pháp
Để tìm số lớn nhất và nhỏ nhất, ta sử dụng các câu lệnh điều kiện if-else. Logic cơ bản là so sánh lần lượt từng số với giá trị hiện tại của min và max:
- Khởi tạo
minvàmaxbằng số đầu tiên - So sánh từng số tiếp theo: nếu nhỏ hơn
minthì cập nhậtmin; nếu lớn hơnmaxthì cập nhậtmax
Chương trình 1: Tìm min/max của 4 số cố định
#include <stdio.h>
int main() {
int min, max, p, q, r, s;
printf("Nhap 4 so nguyen: ");
scanf("%d %d %d %d", &p, &q, &r, &s);
min = max = p; // Khởi tạo min và max bằng số đầu tiên
// So sánh với số thứ 2
if (min > q) min = q;
else if (max < q) max = q;
// So sánh với số thứ 3
if (min > r) min = r;
else if (max < r) max = r;
// So sánh với số thứ 4
if (min > s) min = s;
else if (max < s) max = s;
printf("So lon nhat: %d\n", max);
printf("So nho nhat: %d\n", min);
return 0;
}
Kết quả chạy chương trình
Nhap 4 so nguyen: 34 78 23 12
So lon nhat: 78
So nho nhat: 12
Chương trình 2: Tìm min/max trong mảng (linh hoạt hơn)
Chương trình này cho phép nhập số lượng phần tử tùy ý và tìm min/max trong mảng:
#include <stdio.h>
int main() {
int a[50], i, n, lon, nho;
printf("Nhap so phan tu: ");
scanf("%d", &n);
printf("Nhap cac phan tu cua mang:\n");
for (i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
lon = nho = a[0]; // Khởi tạo bằng phần tử đầu tiên
for (i = 1; i < n; i++) {
if (a[i] > lon) lon = a[i];
if (a[i] < nho) nho = a[i];
}
printf("Gia tri nho nhat: %d\n", nho);
printf("Gia tri lon nhat: %d\n", lon);
return 0;
}
Kết quả chạy chương trình 2
Nhap so phan tu: 8
Nhap cac phan tu cua mang:
1 2 6 4 8 9 3 9
Gia tri nho nhat: 1
Gia tri lon nhat: 9
Giải thích
Cách tiếp cận dùng mảng (Chương trình 2) linh hoạt hơn vì không giới hạn số lượng phần tử. Cả hai chương trình đều sử dụng thuật toán duyệt một lần (O(n)) - hiệu quả và dễ hiểu.