Hướng dẫn giải của Trung bình cộng của 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, kiengyt, Nozz, Namdo

Editorial for avg3num: Trung bình cộng của 3 số

Hiểu bài toán

Bài toán yêu cầu tìm một số nguyên c sao cho trung bình cộng của ba số a, b, c bằng x. Với a, b, x cho trước (1 ≤ a, b, x ≤ 100), ta cần tính c sao cho (a + b + c) / 3 = x. Từ phương trình này, ta có thể suy ra công thức tính c.

Các cách tiếp cận

Cách Phương trình đại số
#include <stdio.h>

int main() {
    int a, b, x;
    scanf("%d %d %d", &a, &b, &x);
    // (a + b + c) / 3 = x  =>  a + b + c = 3x  =>  c = 3x - a - b
    int c = 3 * x - a - b;
    printf("%d\n", c);
    return 0;
}
  • Time Complexity: O(1)
  • Space Complexity: O(1)

Đây là cách tiếp cận trực tiếp nhất. Ta dựa vào định nghĩa trung bình cộng để dựng phương trình (a + b + c) / 3 = x. Sau đó biến đổi phương trình để cô lập biến c: nhân cả hai vế với 3 được a + b + c = 3x, cuối cùng lấy c = 3x - a - b. Phép tính này chỉ bao gồm các phép toán số học cơ bản nên độ phức tạp thời gian và bộ nhớ đều là hằng số O(1).

Cách Giải thích theo biến đổi
#include <stdio.h>

int main() {
    int a, b, x;
    scanf("%d %d %d", &a, &b, &x);
    int sum_target = 3 * x;
    int sum_ab = a + b;
    int c = sum_target - sum_ab;
    printf("%d\n", c);
    return 0;
}
  • Time Complexity: O(1)
  • Space Complexity: O(1)

Cách tiếp cận này thực chất là cách viết chi tiết của phương pháp đầu tiên. Nó chia nhỏ phép tính thành các bước rõ ràng: tính tổng mục tiêu (3x), tính tổng của a và b, rồi lấy hiệu để tìm c. Về mặt bản chất và độ phức tạp, nó hoàn toàn tương đương với cách đầu tiên nhưng giúp người mới học dễ hình dung các bước thực hiện hơn.

Phân tích độ phức tạp

Cách tiếp cận Time Space Tên
1 O(1) O(1) Phương trình đại số
2 O(1) O(1) Giải thích theo biến đổi

Bài học kinh nghiệm

  • Bài toán có thể được giải quyết bằng cách lập phương trình đơn giản từ định nghĩa trung bình cộng.
  • Sau khi biến đổi phương trình (a + b + c) / 3 = x, ta được công thức c = 3*x - a - b.

Lỗi thường gặp

  • Đặt tên biến c trùng với tên biến cần tìm trong một số ngôn ngữ C++/C có thể gây lỗi nếu biến chưa được khởi tạo, hoặc gây nhầm lẫn. Trong các giải pháp mẫu, người dùng dùng biến c để lưu giá trị x hoặc x để lưu c, cần đọc kỹ yêu cầu bài toán.
  • Quên các dấu ngoặc khi tính toán có thể dẫn đến sai kết quả nếu thứ tự ưu tiên phép tính bị thay đổi (ví dụ: 3x - a - b an toàn hơn 3(x - a) - b). Tuy nhiên trong công thức này phép nhân chia có thứ tự ưu tiên cao hơn cộng trừ nên thường không sai nếu viết đúng.

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.