题解(分类讨论)
2026-02-10 21:25:04
发布于:湖南
1阅读
0回复
0点赞
先翻译一下题目:
题目描述:
米尔科和斯拉夫科在他们的周末度假屋前建了一个宏伟的新泳池。这个泳池是一个等腰直角三角形,直角边长度为250。一切都完美无缺,女孩们要来,DJ也要来,派对热闹非凡。但是,出了一个问题。
输入模式:
第一行包含两个整数,即分割线段一个端点的坐标。该点将位于泳池的某一条边上。
输出模式:
输出另一个端点的坐标,保留两位小数。
好的,进入正轨。
此题拿到题,第一眼看分类讨论,分三类,在竖线,横线和斜线。
我们可以先记起始点的坐标分别为 和 。
首先先判断竖线的情况。
我们可以发现随着起始点从上往下,结尾点从横线到了斜线,所以这里还需要分类讨论。
if(y>=125.0)
{/*操作*/}
else {/*操作*/}
但操作里应该填什么呢?
我们可以用等积法列方程。设结尾点的坐标分别为和。
这里当 时我们可以确定 。所以就是解一元一次方程。
化简后可得 ,这里 是三角形的面积。
然后是 的情况。
但这次我们不能确定 和 其中任何一点的初始值了。那怎么办?学过平面坐标系的都知道这个斜边的斜率肯定是 度,如果以右下角的角所在的坐标是 ,那函数解析式肯定是 。但问题是,它不是。但没关系我们不妨看它就是原点。最后再减过来。我们便可以得到 和 的关系式了。
X=sum/(250.0-y)
Y=250.0-X
由此便可以解出,第一种情况。
同理,第二种只需要将第一种情况中的所有 和 , 和 调换一下就可以了。现在就是最后一种情况了。
最后一种情况同样也要分两种小情况,一种是结束点在竖线上,另外一种则是在横线上。而这两种情况都可以确定 和 其中一个的位置,这样就可以列方程了。
代码如下。
#include<bits/stdc++.h>
using namespace std;
double x,y;
double sum=250.0*250.0/2.0;
double x2,y2;
int main(){
cin>>x>>y;
if(x==0.0)
{
if(y>=125.0)
{
y2=0.0;
x2=sum/y;
}
else
{
x2=sum/(250.0-y);
y2=250.0-x2;
}
}
else if(y==0.0)
{
if(x>=125.0)
{
x2=0.0;
y2=sum/x;
}
else
{
y2=sum/(250.0-x);
x2=250.0-y2;
}
}
else
{
if(x<=125.0)
{
y2=0;
x2=250.0-sum/y;
}
else
{
x2=0;
y2=250.0-sum/x;
}
}
printf("%.2lf %.2lf",x2,y2);
return 0;
}
这里空空如也






有帮助,赞一个