题目描述:
给出了正方形的坐标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;
}