问题
亚瑟王计划在一个新房间里建造圆桌,但这次他想要一个有阳光进入的房间,所以他计划建造一个玻璃屋顶。他还希望他的圆桌在白天发光,特别是在中午,所以他希望它完全被阳光覆盖。但兰斯洛特希望房间屋顶的玻璃部分是三角形的(没有人知道原因,也许他发誓或类似的东西)。所以,房间里会有一个三角形区域,中午阳光全部被遮挡,圆桌必须在这个区域内建造。现在,亚瑟王希望建造一个他能装的最大的桌子,使其适合三角形的阳光照射区域。由于他在几何方面不是很好,他要求加拉哈德帮助他(兰斯洛特几何学很好,但亚瑟王没有让兰斯洛特帮助他,因为他担心他会提出另一个奇怪的建议)。 p>
你能帮助加拉哈德(因为他对电脑不太好)并编写了一个程序,它给出了适合在阳光照射区域的最大圆桌的半径吗?你可以假设圆桌是一个完美的圆圈。
输入
会有任意数量的房间。每个房间由三个实数(a,b和c)表示,它们代表三角形阳光区域的大小。没有三角形大小将大于1000000,您可以假设max(a,b,c)< =(a + b + c)/ 2.您必须阅读,直到到达文件末尾。
输出
对于每个房间配置读取,您必须打印以下行:
圆桌的半径是:r 其中r是适合在阳光照射区域的最大圆桌的半径,舍入为3个十进制数字。 样本输入
12.0 12.0 8.0 样本输出
圆桌的半径为:2.828
是的,这很容易。但是当在网站提交enter link description here时,我的判决是错误的答案。 我的代码是:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double a,b,c,s,t,r;
while(cin>>a>>b>>c)
{
double max=a;
if(max<b)
max=b;
else if(max<c)
max=c;
if(max>(a+b+c)/2.0)
continue;
s=(a+b+c)/2.0;
t=sqrt(s*(s-a)*(s-b)*(s-c));
if(t>1000000)
continue;
r=(2.0*t)/(a+b+c);
r=floor(r*1000.0);
r/=1000.0;
cout<<"The radius of the round table is: "<<r<<endl;
}
return 0;
}
答案 0 :(得分:0)
通过三角形的正方形有一个简单的解决方案(你甚至得到一个提示,即max(a,b,c)&lt;(a + b + c)/ 2):
设a,b,c - 三角形边长,p =(a + b + c)/ 2,所以三角形的正方形是
S = sqrt(p(p-a)(p-b)(p-c))
另一方面(其中r是圆桌的半径)
S = pr
所以
r = sqrt(p(p-a)(p-b)(p-c))/ p其中p =(a + b + c)/ 2
double RoundTableRadius(double a, double b, double c) {
double p = (a + b + c) / 2.0;
return sqrt(p * (p - a) * (p - b) * (p - c)) / p;
}
答案 1 :(得分:0)
我找到了解决方案:) 感谢你所做的一切 ... 这是解决方案:
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int main()
{
double a,b,c,s,t,r;
while(cin>>a>>b>>c)
{
if(a==0.0 && b==0.0 && c==0.0)
{
cout<<"The radius of the round table is: 0.000"<<endl;
continue;
}
s=(a+b+c)/2.0;
t=sqrt(s*(s-a)*(s-b)*(s-c));
r=(2.0*t)/(a+b+c);
printf("The radius of the round table is: %.3lf\n",r);
}
return 0;
}