用下面的数据类型分别表示点和矩形:
struct POINT { //点
int x, y; //坐标值x和y
};
struct RECT { //矩形
POINT lt, rb; //矩形的左上角和右下角
};
输入矩形两个点的坐标值x和y,再输入第3个点的坐标,判断第3个点是否在矩形的边框上。
输入格式:第一行输入左上角坐标
第二行输入右下角坐标
第三行输入第三个点的坐标
输入整型,空格分隔。
输出格式:输出YES或者NO
输入:-20 20
20 -10
20 10
输出:YES
备注:矩形平行于x、y轴
思路:如果一个点在矩形边框上,那么这个点那么在竖着的两条边上,要么在横着的两条边上。
那么在这竖着或横着的边上条件是什么呢:
1.如果在横着的边上,也就是这个点的y坐标等于横线两端点的y坐标,且x坐标在两端点x坐标之间。
2.如果在竖着的边上,也就是这个点的x坐标等于横线两端点的x坐标,且y坐标在两端点y坐标之间。
代码:
#include<stdio.h>
struct POINT
{
int x,y;
};
struct RECT
{
struct POINT lt,rb;
};
int main()
{
struct RECT rect;
struct POINT point;
scanf("%d %d",&(rect.lt.x),&(rect.lt.y));
scanf("%d %d",&(rect.rb.x),&(rect.rb.y));
scanf("%d %d",&(point.x),&(point.y));
//点在两条竖线上
if((point.x==rect.lt.x||point.x==rect.rb.x)&&
(point.y<=rect.lt.y&&point.y>=rect.rb.y))
{
printf("YES");
return 0;
}
//点在两条横线上
if((point.y==rect.lt.y||point.y==rect.rb.y)&&
(point.x<=rect.lt.x&&point.x>=rect.rb.x))
{
printf("YES");
return 0;
}
printf("NO");
return 0;
}
结果: