我是怎么WA了6次的?
我们可以设三个圆的半径分别为X、Y、Z,原三角形的三边分别记为a、b、c,据两圆外切的性质(圆心距等于半径和):
x+y=a;y+z=b;z+x=c
解这个方程组就可求出三个圆的半径。(已知三角形三边的条件下)
x=(a+b-c)/2,y=(a+c-b)/2;z=(b+c-a)/2;
也就是说:只要是个三角形,都可以的,不存在“No"的输出
#include<bits/stdc++.h>
using namespace std;
long long int a,b,c;
double x,y,z;
int main(){
scanf("%lld%lld%lld",&a,&b,&c);
if((a+b)<=c || (a+c)<=b || (b+c)<=a)
printf("wtnl");
else{
x=(a+b-c)/2.0;
y=(a+c-b)/2.0;
z=(b+c-a)/2.0;//错解:/2(精度缺失)
if(x>y)
swap(x,y);
if(x>z)
swap(x,z);
if(y>z)
swap(y,z);
printf("Yes\n");//错解:YES
printf("%.2lf %.2lf %.2lf",x,y,z);//错解:没有空格
}
return 0;
}

京公网安备 11010502036488号