Hướng dẫn giải của Tìm số lớn nhất trong 3 số
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.
Lời giải này đang bị ẩn cho đến khi bạn chọn mở ra.
Chúng tôi khuyên bạn nên tự thử giải bài trước. Việc mở lời giải có thể làm lộ mất ý tưởng chính trước khi bạn có cơ hội tự giải.
Bạn phải đăng nhập để mở lời giải này.
Đăng nhậpTác giả: , , ,
Hiểu bài toán
Bài toán yêu cầu nhập vào 3 số nguyên dương và tìm ra số lớn nhất trong 3 số đó. Ví dụ: với input '1 2 3', output mong đợi là '3'. Dữ liệu đầu vào có giới hạn giá trị không quá 10^9, nhưng với 3 số thì ta chỉ cần dùng kiểu int là đủ trong hầu hết các ngôn ngữ.
Các cách tiếp cận
Cách So sánh trực tiếp từng cặp
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
int max = a;
if (max <= b) max = b;
if (max <= c) max = c;
printf("%d", max);
return 0;
}
- Time Complexity: O(1)
- Space Complexity: O(1)
Khởi tạo biến max bằng giá trị đầu tiên (a). Sau đó so sánh max với b và cập nhật nếu b lớn hơn hoặc bằng. Tiếp tục so sánh max hiện tại với c và cập nhật nếu cần. Cuối cùng in ra giá trị max. Cách này đơn giản, dễ hiểu và thực hiện đúng yêu cầu.
Cách Sử dụng toán tử ba ngôi lồng nhau
#include <stdio.h>
int main() {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
printf("%d", (a > b) ? a : ((b > c) ? b : c));
return 0;
}
- Time Complexity: O(1)
- Space Complexity: O(1)
Sử dụng toán tử ba ngôi để so sánh lồng nhau: So sánh a và b, nếu a lớn hơn thì chọn a, ngược lại so sánh b và c để chọn giá trị lớn hơn giữa b và c. Cách này ngắn gọn nhưng khó đọc hơn so với cách dùng if thông thường.
Cách Sử dụng hàm so sánh từng bước
#include <stdio.h>
#include <stdlib.h>
int main() {
int a, b, c, max;
scanf("%d %d %d", &a, &b, &c);
max = a;
if (b > max) max = b;
if (c > max) max = c;
printf("%d", max);
return 0;
}
- Time Complexity: O(1)
- Space Complexity: O(1)
Tương tự cách đầu tiên nhưng cú pháp scanf có thêm khoảng trắng, và cách viết điều kiện rõ ràng hơn. Logic vẫn là tìm max bằng cách so sánh từng phần tử với max hiện tại.
Phân tích độ phức tạp
| Cách tiếp cận | Time | Space | Tên |
|---|---|---|---|
| 1 | O(1) | O(1) | So sánh trực tiếp từng cặp |
| 2 | O(1) | O(1) | Sử dụng toán tử ba ngôi lồng nhau |
| 3 | O(1) | O(1) | Sử dụng hàm so sánh từng bước |
Bài học kinh nghiệm
- Với chỉ 3 số, việc tìm số lớn nhất có thể thực hiện bằng cách so sánh trực tiếp mà không cần cấu trúc phức tạp.
- Luôn khởi tạo max bằng một trong các giá trị đầu vào để đảm bảo giá trị max hợp lệ ngay từ đầu.
Lỗi thường gặp
- Quên khai báo biến hoặc không khởi tạo giá trị ban đầu cho max có thể dẫn đến hành vi không xác định.
- Lỗi cú pháp trong scanf như thiếu dấu & hoặc đặt sai vị trí có thể gây ra lỗi nhập liệu.
Bình luận