Hướng dẫn giải của IF18: Tam giác đều


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.

Hướng dẫn giải

Cho 4 đại lượng của tam giác đều là cạnh ~a~, bán kính đường tròn nội tiếp ~r~, bán kính đường tròn ngoại tiếp ~R~ và diện tích ~S~. Chỉ có đúng một đại lượng khác 0, ba đại lượng còn lại bằng 0. Hãy tính đầy đủ cả 4 đại lượng và in ra với 2 chữ số thập phân.

Cách làm

Các công thức của tam giác đều với cạnh ~a~ là: ~r = a\cdot\frac{\sqrt{3}}{6}~, ~R = a\cdot\frac{\sqrt{3}}{3}~, ~S = a^2\cdot\frac{\sqrt{3}}{4}~.

  • Bước 1: Đọc 4 số thực. Kiểm tra xem đại lượng nào khác 0 để tìm cạnh ~a~ từ đại lượng đó:
    • Nếu ~a > 0~ thì giữ nguyên.
    • Nếu ~r > 0~ thì ~a = 2\sqrt{3}\cdot r~.
    • Nếu ~R > 0~ thì ~a = \sqrt{3}\cdot R~.
    • Còn lại (~S > 0~) thì ~a = \sqrt{\frac{4S}{\sqrt{3}}}~.
  • Bước 2: Khi đã có ~a~, tính lại ~r~, ~R~, ~S~ theo các công thức trên.
  • Bước 3: In 4 giá trị cách nhau một khoảng trắng, làm tròn 2 chữ số thập phân.

Bẫy: dùng số thực (double) cho tất cả các đại lượng, không dùng số nguyên.

#include <bits/stdc++.h>
using namespace std;

int main() {
    double a, r, R, S;
    cin >> a >> r >> R >> S;
    // c là căn bậc hai của 3
    double c = sqrt(3.0);
    // Tìm cạnh a từ giá trị khác 0 duy nhất
    if (a > 0) {
        // a đã biết, không cần làm gì
    } else if (r > 0) {
        a = 2 * c * r;
    } else if (R > 0) {
        a = c * R;
    } else {
        a = sqrt(4 * S / c);
    }
    // Tính lại r, R, S từ a
    r = a * c / 6;
    R = a * c / 3;
    S = a * a * c / 4;
    printf("%.2f %.2f %.2f %.2f\n", a, r, R, S);
    return 0;
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


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