Trích Nguyên văn bởi tengiday Xem bài viết
Bài này có nhiều cách làm. Bạn thử cái này xem nhé.

Nhận xét:

Để 2 đường tròn thỏa mãn tính chất bài toán thì:
a) 2 đường tròn phải tiếp xúc nhau và tiếp xúc với các cạnh của tam giác.
b) Sẽ có 1 cạnh của tam giác phải tiếp xúc với cả 2 đường tròn. 2 cạnh còn lại chỉ tiếp xúc với 1 đường tròn.
c) Tâm của mỗi đường tròn phải nằm trên đường thẳng nối giữa tâm của đường tròn nội tiếp và 1 trong 3 đỉnh của tam giác.

Không mất tính tổng quát, giả sử 2 đường tròn cần tìm tiếp xúc với cạnh a của tam giác ABC như trong hình vẽ.

Gọi:
- r là bán kinh của bánh sinh nhật lớn nhất cần tìm (đường tròn nhỏ).
- R là bán kính của đường tròn nội tiếp tam giác ABC.
- p là nửa chu vi của tam giác ABC, tức là p = (a + b + c) / 2.
Mã:
1/R = sqrt( p / ((p-a)(p-b)(p-c)) ).
Tại sao?

Nếu A là diện tích của tam giác thì
- Ta dễ dàng thấy: A = p*R.
- Công thức Heron về diện tích tam giác: A = sqrt( p(p-a)(p-b)(p-c) ).


Gọi u, v, x, y là độ dài các cạnh theo như hình vẽ. Theo hệ quả của định lý Thales, ta có:
Mã:
u/x = r/R và v/y = r/R.

Mã:
a = u + 2r + v = (x/R)*r + 2r + (y/R)*r = (2 + a/R) * r,
ta có công thức tìm r như sau:
Mã:
r = a/(2 + a/R),
với 1/R được tính như trên. Đây chính là công thức cần tìm.

Điểm cuối cùng: a phải là cạnh nào?
Trả lời: a phải là cạnh dài nhất theo như công thức của r (got it?)

Code như sau:
Mã:
// nhập a, b, c kiểu double.
    
double p = (a + b + c) / 2,
       inv_R = sqrt(p / (p - a) / (p - b) / (p - c));
    
a = max(a, b < c ? c : b);
printf("%.3f\n", a / (2 + a * inv_R));

Good luck.
Không còn gì để nói, quá xuất sắc. Lời giải đầy đủ kèm hình minh họa dễ hình dung.