求一点是否在正方形/矩形中

题目描述:

给出了正方形的坐标x,y和边长a,那么正方形的对角分别为x,y和x+a,y+a,给一个坐标,问坐标是否在正方形中(边界上也算)

输入:

3 2 8
8 10

输出:

yes

编写简单函数:

bool IsinRange(int a, int Num, int b) {
	return a <= Num && Num <= b;
}

题目扩充:

1 如果是矩形呢?
2 如果给的是矩形的(左上和右下)(左下和右上)

#include<iostream>

using namespace std;

int square[55];
const int minint = -100000000;
int lx[55], ly[55], rx[55], ry[55];
bool insquare[55];

bool IsinRange(int a, int Num, int b) {
	return a <= Num && Num <= b;
}
bool legal(int a, int Num, int b) {
	if (a>b)
	{
		return IsinRange(b, Num, a);
	}
	else
	{
		return IsinRange(a, Num, b);
	}
}
int Getlength(int x1, int x2) {
	if (x1>x2)
	{
		return x1 - x2;
	}
	else
	{
		return x2 - x1;
	}
}
//求面积
int Getsquare(int x1, int y1, int x2, int y2) {
	int x, y;
	x = Getlength(x1, x2);
	y = Getlength(y1, y2);
	return x * y;
}

int main() 
{
	int i = 0, j = 0,k = 0;
	int n;
	int gx, gy;
	cin >> n;
	for ( i = 0; i <n ; i++)
	{
		cin >> lx[i] >> ly[i] >> rx[i] >> ry[i];
	}
	for ( i = 0; i < n; i++)
	{
		square[i] = Getsquare(lx[i], ly[i], rx[i], ry[i]);
	}
	for ( i = 0; i < n; i++)
	{
		cin >> gx >> gy;
	}
	for ( i = 0; i < n; i++)
	{
		if (legal(lx[i],gx,rx[i])&&legal(ly[i],gx,ry[i]))
		{
			insquare[i] = true;
		}
	}

	return 0;
}

例题:
题目描述

地图上有若干个导电矩形,长度大小不一(矩形四个角的坐标x,y<=10000)而且电工觉得,反正矩形很标准,边都平行于坐标轴,所以矩形随便给两个对角的点就够了……这电工觉得你够聪明。
在某个位置有一个电针,而且放出了一股电流,只有包含(包括在边界上)了电针的矩形才有可能将这电流导流,而最终面积最大的矩形是导流的矩形。
求这个矩形是输入数据中给出的第几个矩形

输入

第一行是一个数字n,表示矩形个数
接下来n行,
每行4个整数,x1,y1,x2,y2,表示第i号矩形对角的坐标
接下来1行,两个整数x,y,表示电针的坐标

输出

一个整数,表示导流的矩形的编号(如果面积相等,那么编号尽可能的小)

样例输入

3
6 8 2 3
1 3 5 6
8 2 1 9
4 4

样例输出

3

#include<iostream>

using namespace std;

int square[55];
const int minint = -100000000;
int lx[55], ly[55], rx[55], ry[55];
bool insquare[55];

bool IsinRange(int a, int Num, int b) {
	return a <= Num && Num <= b;
}
bool legal(int a, int Num, int b) {
	if (a>b)
	{
		return IsinRange(b, Num, a);
	}
	else
	{
		return IsinRange(a, Num, b);
	}
}
int Getlength(int x1, int x2) {
	if (x1>x2)
	{
		return x1 - x2;
	}
	else
	{
		return x2 - x1;
	}
}
//求面积
int Getsquare(int x1, int y1, int x2, int y2) {
	int x, y;
	x = Getlength(x1, x2);
	y = Getlength(y1, y2);
	return x * y;
}

int main() 
{
	int i = 0, j = 0,k = 0;
	int n;
	int gx, gy;
	int a;
	cin >> n; //n个矩形
	//读入n个矩形点的坐标
	for ( i = 0; i < n ; i++)
	{
		cin >> lx[i] >> ly[i] >> rx[i] >> ry[i];
	}
	for ( i = 0; i < n; i++)
	{
		square[i] = Getsquare(lx[i], ly[i], rx[i], ry[i]);
	}
	//读入电针坐标
	cin >> gx >> gy;

	for ( i = 0; i < n; i++)
	{
		if (legal(lx[i],gx,rx[i])&&legal(ly[i],gx,ry[i]))
		{
			insquare[i] = true;
		}
	}

	a = 0;
	int maxsquare = minint;
	for (i = 0; i < n; i++)
	{
		if (maxsquare < square[i]) //比较大小
		{
			if (insquare[i]) // 判断合法性
			{
				maxsquare = square[i];
				a = i;
			}
		}
	}
	cout << a+1 << endl;
	return 0;
}


原创文章 85 获赞 86 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43699840/article/details/105850283