题解:P6468 [COCI2008-2009#6] BAZEN
题意简述:
在一个直角边长为
知识预览:
初中的三角形基础知识;分类讨论思想。
具体思想:
本题要求分类讨论思想能力较高,具体的,令给定的点的坐标为
- 当给定的点在这个三角形的 三个顶点 上时:由初中的三角形中线定理可得:三角形的中线平分这个三角形的面积。也就是目标点在给定点的 对边的中点上。
- 当给定的点在这个三角形 三边的中点 上时:由(
1 )反推:给定点位于目标点的 对边的中点上 。 - 当给定的点在这个三角形的 斜边(即
AB 边)上时:若a>125 ,则目标点 在AC 上;若a<125 ,则目标点 在BC 上 。 - 当给定的点在这个三角形的 直角边(即
AC 以及BC 边)上时:则目标点在 斜边AB 上。
具体公式请读者自行画图理解,运用三角形的面积公式的灵活变换寻求答案。
代码如下:
#include<bits/stdc++.h>
using namespace std;
double x,y,s=31250.0;
int main(){
cin>>x>>y;
if(x==0&&y==0){
cout<<"125.00 125.00";
exit(0);
}
if(x==250&&y==0){
cout<<"0.00 125.00";
exit(0);
}
if(x==0&&y==250){
cout<<"125.00 0.00";
exit(0);
}
if(x==125&&y==125){
cout<<"0.00 0.00";
exit(0);
}
if(x==0&&y<250){
if(y>125.0){
double h=s/y;
cout<<fixed<<setprecision(2)<<h<<" 0.00";
}
else{
double d=250.0-y;
double h=s/d;
cout<<fixed<<setprecision(2)<<h<<" "<<250.00-h
}
exit(0);
}
if(y==0&&x<250){
if(x>125.0){
double h=s/x;
cout<<fixed<<setprecision(2)<<"0.00 "<<h;
}
else{
double d=250.0-x;
double h=s/d;
cout<<fixed<<setprecision(2)<<250.00-h<<" "<<h;
}
exit(0);
}
if(x+y==250&&x>y){
double d=s/x;
cout<<fixed<<setprecision(2)<<"0.00 "<<250.00-d;
exit(0);
}
if(x+y==0&&x<y){
double d=s/y;
cout<<fixed<<setprecision(2)<<250.00-d<<" 0.00";
exit(0);
}
}
好了,最后给大家留个证明题:在