11 条题解
-
1
这题很简单,依此判断各种情况即可。👀️ 👀️ 👀️
🚀️ 🚀️ 🚀️ 上代码。(已AC)
#include<bits/stdc++.h> using namespace std; int main() { int a[3]; // 创建1个长度为3的变量。 for (int i = 0; i < 3; i++) { cin >> a[i]; // 依次输入。 } sort(a, a + 3); // 用sort()函数对数组a进行排序。 if (a[0] * a[0] + a[1] * a[1] == a[2] * a[2]) // 判断三条线段能否构成一个直角三角形。 { double x = a[0], y = a[1]; printf("%.1f", x * y / 2); // 输出三角形面积。 } else { cout << "No"; // 否则输出No。 } }
-
1
这题其实不用这么麻烦,因为三角形任意两边之和大于第三边,所以可以直接判断直角三角形的两条直角边是否大于斜边,直角三角形的面积就等于两条直角边的和除以二
参考代码(已AC):
#include <bits/stdc++.h> using namespace std; int a[3]; int main() { for(int i=1;i<=3;i++) cin>>a[i]; sort(a+1,a+4); //从小到大排序 if(a[1]+a[2]<=a[3])//判断两条直角边之和是否大于斜边 cout<<"No"; else printf("%.1f",a[1]*a[2]/2.0); return 0; }
-
1
这一道题其实比较简单,可利用海伦公式:
s = sqrt( p(p - a) * (p - b)* (p - c)) 其中 p = (a + b + c) / 2
上代码!
#include <bits/stdc++.h> using namespace std; int main() { int a,b,c; cin >> a >> b >> c; if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a) { double p = (a + b + c) / 2; printf("%.1lf",sqrt(p * (p - a) * (p - b) * (p - c))); //或者用 cout << fixed << setprecision(1) << sqrt(p * (p - a) * (p - b) * (p - c)); } else { cout << "No"; } return 0; }
-
1
#include <bits/stdc++.h> using namespace std; int main() { int a,b,c,d,e; cin >> a >> b >> c; //核心代码: //确定边 if (a <= b && a <= c) { d = a; if (b <= c) { e = b; } else { e = c; } } else { d = b; e = c; } //判断直角 if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a) { cout << fixed << setprecision(1) << d * e / 2.0; } else { cout << "No"; } return 0; }
-
1
给定三条边的长度a、b、c,判定是否能够成直角三角形,这里要了解一下构成条件: 1、 任意三角形满足:任意两边之和大于第三边(a+b>c) 2、 对于直角三角形满足: 两条直角边的平方和等于斜边的平方,直角三角形的斜边是最大的,就是,,其中c是斜边,,; 3、 直角三角形的面积公式: (底*高)/2, 底和高就是两条直角边
求出三个数中的最大值和最小值,就可以确定斜边和直角边了,最大值为斜边,剩下的两个为直角边,可以将三个数存入数组中,并进行累加求和;知道了三条边的和,设定maxx、minn初始值,求出最大值和最小值,进而求出第二条直角边就可以以啦
int maxx=0,minn=a[0]; for(int i=0;i<3;i++){ if(maxx<=a[i]){ maxx=a[i]; } if(minn>=a[i]){ minn=a[i]; } } int b = sum-maxx-minn;
确定直角边和斜边,那么就可以利用 两条直角边的平方和等于斜边的平方,判断是否可以构成直角三角形,构不成输出 No ;可以就计算面积输出就可以啦
if((minn*minn+b*b)==maxx*maxx){ cout<<fixed<<setprecision(1)<< ; //注意结果保留1位小数,即底和高的乘积除以2,由于底和高是int类型,注意*1.0变为double }else{ cout<<"No"; }
-
0
#include <iostream> #include <algorithm> #include <cmath> #include <iomanip> using namespace std; int main() { double a[3]; cin >> a[0] >> a[1] >> a[2]; sort(a, a + 3); if (a[0] + a[1] > a[2] && pow(a[0], 2) + pow(a[1], 2) == pow(a[2], 2)) { cout << fixed << setprecision(1) << a[0] * a[1] / 2.0; } else { cout << "No"; } return 0; }
-
0
#include <iostream> #include <iomanip> using namespace std; int main() { int a, b, c; double s; cin >> a >> b >> c; if (a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a) { if (a > b && a > c) { s = b * c / 2.0; } else if (b > a && b > c) { s = a * c / 2.0; } else { s = a * b / 2.0; } cout << fixed << setprecision(1) << s; } else { cout << "No"; } return 0; }
- 1
信息
- ID
- 42
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 5
- 标签
- 递交数
- 709
- 已通过
- 256
- 上传者