zoj_1241 Geometry Made Simple

Mathematics can be so easy when you have a computer. Consider the following example. You probably know that in a right-angled triangle, the length of the three sides a, b, c (where c is the longest side, called the hypotenuse) satisfy the relation a*a+b*b=c*c. This is called Pythagora's Law.

Here we consider the problem of computing the length of the third side, if two are given.

Input

The input contains the descriptions of several triangles. Each description consists of a line containing three integers a, b and c, giving the lengths of the respective sides of a right-angled triangle. Exactly one of the three numbers is equal to -1 (the 'unknown' side), the others are positive (the 'given' sides).

A description having a=b=c=0 terminates the input.


Output

For each triangle description in the input, first output the number of the triangle, as shown in the sample output. Then print "Impossible." if there is no right-angled triangle, that has the 'given' side lengths. Otherwise output the length of the 'unknown' side in the format "s = l", where s is the name of the unknown side (a, b or c), and l is its length. l must be printed exact to three digits to the right of the decimal point.

Print a blank line after each test case.


Sample Input

3 4 -1
-1 2 7
5 -1 3
0 0 0


Sample Output

Triangle #1
c = 5.000

Triangle #2
a = 6.708

Triangle #3
Impossible.


分析:其实本题就是一道勾股定理题,已知两边,求第三边。解题思路并不难,关键是要看清输出格式:

            1.输出一个测试案例即空一行,而不是每行输出数据间空一行

            2.输出小数点后三位有效数字

           对于第二个输出要求,有两种方法可以实现:

            1. cout.precision(3);//有效数字3位

                cout<<fixed<<"a = "<<pow(c*c-b*b,.5);

            2. cout<<fixed<<setprecision(3)<<"a = "<<pow(c*c-b*b,.5); //需要引入头文件<iomanip>

            注意:fixed是以固定点的方式显示,此时括号中的精度是小数位的精度;如没有fixed,括号里的精度是整个数字的精度。

   

            还有一个问题就是平方根问题,同样有两种解法:

            1. double sqrt(double )或者float sqrt(float ),或long double sqrt(long double)

               //需要引入头文件<cmath>

               注意:没有int sqrt(int),但是返回值可以是int。

            2. pow(x,y)

                //需要引入头文件<cmath>,x为底数,y为指数

                注意:函数的参数类型与返回类型的对应规则同上。


Answer:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int a,b,c,n;
    n=0;
    cout.precision(3);
    while(cin>>a>>b>>c)
    {
        if(a==0&&b==0&&c==0) break;
        n++;
        if(a==-1)
        {
            if(c*c-b*b<=0)
            {
                cout<<"Triangle #"<<n<<endl;
                cout<<"Impossible."<<endl;
                cout<<endl;
            }
            else
            {
                cout<<"Triangle #"<<n<<endl;
                cout<<"a = "<<fixed<<pow(c*c-b*b,.5)<<endl;
                cout<<endl;
            }
        }
            if(b==-1)
        {
            if(c*c-a*a<=0)
            {
                cout<<"Triangle #"<<n<<endl;
                cout<<"Impossible."<<endl;
                cout<<endl;
            }
            else
            {
                cout<<"Triangle #"<<n<<endl;
                cout<<"b = "<<fixed<<pow(c*c-a*a,.5)<<endl;
                cout<<endl;
            }
        }
          if(c==-1)
           {
                cout<<"Triangle #"<<n<<endl;
                cout<<"c = "<<fixed<<sqrt(a*a+b*b)<<endl;
                cout<<endl;
           }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值