题目描述
现有一个边长为正整数的三角形,问能否以其三个顶点为圆心画三个圆,使三个圆两两外切
三边长均不超过
1
0
8
10^8
108
输入描述:
三个正整数,表示三角形的边长
输出描述:
如果三条边不能构成三角形,输出“wtnl”
如果三条边能构成三角形但不能画出符合要求的圆,输出“No”
否则输出一行“Yes”
然后在第二行输出一组方案,按升序给出三个圆的半径,保留两位小数
输入
2 3 3
输出
Yes
1.00 1.00 2.00
题解
- 画个图算一下就行
- 注意不能构成三角形的情况,不要忘记处理
AC-Code
#include <bits/stdc++.h>
using namespace std;
bool isOK(double a, double b, double c){
if(a+b <= c) return false;
if(a+c <= b) return false;
if(b+c <= a) return false;
return true;
}
int main(){
double a[3], b[3]; while(cin >> a[0] >> a[1] >> a[2]){
sort(a, a+3);
double x = (a[0] + a[1] - a[2]) / 2;
if(x > 0 && isOK(a[0], a[1], a[2])){
cout << "Yes" << endl;
b[0] = x; b[1] = a[0]-x; b[2] = a[2]-a[0]+x;
sort(b, b+3);
printf("%.2f %.2f %.2f\n", b[0], b[1], b[2]);
}
else if(!isOK(a[0], a[1], a[2])){
cout << "wtnl" << endl;
}
else{
cout << "No" << endl;
}
}
return 0;
}