专栏文章

题解:P6468 [COCI2008-2009#6] BAZEN

P6468题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqy5vqs
此快照首次捕获于
2025/12/04 12:39
3 个月前
此快照最后确认于
2025/12/04 12:39
3 个月前
查看原文

题意简述:

在一个直角边长为 250250 的等腰直角三角形中,给定一个在三角形边上的一点,要求找出同样一个在三角形边上的点,使得两点的连线可以将此三角形的面积平分。保留两位小数。

知识预览:

初中的三角形基础知识;分类讨论思想。

具体思想:

本题要求分类讨论思想能力较高,具体的,令给定的点的坐标为 (a,b)(a,b),可分为如下几种情况:
  1. 当给定的点在这个三角形的 三个顶点 上时:由初中的三角形中线定理可得:三角形的中线平分这个三角形的面积。也就是目标点在给定点的 对边的中点上
  2. 当给定的点在这个三角形 三边的中点 上时:由( 11 )反推:给定点位于目标点的 对边的中点上
  3. 当给定的点在这个三角形的 斜边(即 ABAB 边)上时:若 a>125a>125 ,则目标点 ACAC;若 a<125a<125 ,则目标点 BCBC
  4. 当给定的点在这个三角形的 直角边(即 ACAC 以及 BCBC 边)上时:则目标点在 斜边 ABAB
具体公式请读者自行画图理解,运用三角形的面积公式的灵活变换寻求答案。
代码如下:
CPP
#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);
	}
}
好了,最后给大家留个证明题:在 ABAB 边上的点的横纵坐标的和为 250250。很简单的。

评论

0 条评论,欢迎与作者交流。

正在加载评论...