题解
判断直角三角形
1 条题解
-
0
P4290 判断直角三角形(【入门】)
解题思路
三条线段要围成一个直角三角形,必须满足"两条短边的平方和等于长边的平方",这就是著名的勾股定理。题目很贴心,输入的三个数已经排好序:,所以最大的 一定是斜边, 和 就是两条直角边。
我们只要验证 是否成立:
- 成立:说明能构成直角三角形,面积就是两条直角边乘积的一半,即 ;
- 不成立:输出小写字母
no。
举个例子:输入
5 4 3,,,两边相等,所以是直角三角形,面积 。边界情况:比如输入
3 2 1,,而 ,不相等,输出no。另外,直角三角形的两条整数直角边里一定有一条是偶数,所以 一定是偶数,用整数除法除以 2 不会丢掉小数部分。参考代码
// 判断三条线段能否构成直角三角形,能则输出面积 #include <iostream> using namespace std; int main() { int a, b, c; cin >> a >> b >> c; // 输入保证 a>=b>=c,所以 a 一定是斜边 if (a * a == b * b + c * c) { // 面积 = 两条直角边相乘再除以2 cout << b * c / 2 << endl; } else { cout << "no" << endl; } return 0; }复杂度分析
程序只做了几次乘法和一次比较,无论三条线段多长,都只需要固定几步,所以时间复杂度是 。只用了 三个变量,额外空间复杂度也是 。
- 1