圆桌骑士

时间:2013-12-05 06:52:22

标签: c++11

问题

亚瑟王计划在一个新房间里建造圆桌,但这次他想要一个有阳光进入的房间,所以他计划建造一个玻璃屋顶。他还希望他的圆桌在白天发光,特别是在中午,所以他希望它完全被阳光覆盖。但兰斯洛特希望房间屋顶的玻璃部分是三角形的(没有人知道原因,也许他发誓或类似的东西)。所以,房间里会有一个三角形区域,中午阳光全部被遮挡,圆桌必须在这个区域内建造。

现在,亚瑟王希望建造一个他能装的最大的桌子,使其适合三角形的阳光照射区域。由于他在几何方面不是很好,他要求加拉哈德帮助他(兰斯洛特几何学很好,但亚瑟王没有让兰斯洛特帮助他,因为他担心他会提出另一个奇怪的建议)。 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;
}

2 个答案:

答案 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;
}