Hướng dẫn giải của Tìm số lớn nhất trong 3 số


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.

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ập

Tác giả: Hiếu Nguyễn, vanht216, tle778047, nguyencongk53e

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

Please read the guidelines before commenting.


Không có bình luận tại thời điểm này.