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