[个人存档]
题目描述
(这题简单,请耐心读题)
输入包含几个三角形的描述。每个描述由一条包含三个整数a、b和c的线组成,这三个整数给出了直角三角形各边的长度。现在有一些直角三角形。这些三角形只给出了两条边的长度,你需要求出它的第三条边的长度。
注 勾股定理:直角三角形的直角边的平方和等于斜边的平方。
例如:三角形的直角边为 a,b斜边为c。那必然有:a * a + b * b = c * c。
输入
- 输入有多组
- 每组一行三个数 a,b,c ; a 和 b 为 22 条直角边, c 为斜边(未知用 −1 表示)
- 以 000 为结束
输出
- 每一组输出两行
- 第一行输出测试编号“Triangle #x”(不要输出引号),x为测试编号
- 第二行输出 c 的值,例如: c=5.000 ,保留三位小数(如果不成立输出 Impossible.) 。
- 每组之间有一个空行
样例
输入数据 1
3 4 -1 -1 2 7 5 -1 3 0 0 0
输出数据 1
Triangle #1 c = 5.000 Triangle #2 a = 6.708 Triangle #3 Impossible.
数据范围
- 存在 20% 的数据,−1−只存在于第一个数。
- 存在 20% 的数据,−1 只存在于第二个数。
- 存在 20% 的数据,−1 只存在于第三个数。
- 对于剩下的 40% 的数据,-1会在3个位置中随机存在。
- 对于 100% 的数据,所有数字都不会超过 20。
代码
解题思路
对于这道题,我们知道勾股定理的概念和公式即可,分别掌握求三边的方法。
主要就是套公式,找到解题方法,用模拟,注意输出格式,很easy。
话不多说,上代码
#include<bits/stdc++.h>
using namespace std;
int main(){
double a, b, c;
int idx;
cout<<fixed<<setprecision(3);
while(cin>>a>>b>>c&&a&&b&&c){
cout<<"Triangle #"<<++idx<<"\n";
if(a==-1){
if(c<=b)cout<<"Impossible."<<"\n";
else cout << "a = "<< sqrt(c*c-b*b)<<"\n";
}
if(b==-1){
if(c<=a)cout<<"Impossible."<<"\n";
else cout << "b = "<< sqrt(c*c-a*a)<<"\n";
}
if(c==-1){
cout<<"c = "<<sqrt(a*a+b*b)<<"\n";
}
cout << endl;
}
return 0;
}