问题:
1020: 最小长方形
时间限制: 1 Sec 内存限制: 32 MB
提交: 19 解决: 12
题目描述
给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内。长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内。
输入
测试输入包含若干测试用例,每个测试用例由一系列坐标组成,每对坐标占一行,其中|x|和|y|小于 231;一对0 坐标标志着一个测试用例的结束。注意(0, 0)不作为任何一个测试用例里面的点。一个没有点的测试用例标志着整个输入的结束。
输出
对每个测试用例,在1行内输出2对整数,其间用一个空格隔开。第1对整数是长方形框左下角的坐标,第2对整数是长方形框右上角的坐标。
样例输入
12 56
23 56
13 10
0 0
12 34
0 0
0 0
样例输出
12 10 23 56
12 34 12 34
code:
#include<stdio.h>
#define N 100
#define min(a,b) ((a)<(b))?(a):(b)
#define max(a,b) ((a)>(b))?(a):(b)
int main()
{
int count=0,mina,maxa,maxb,minb; //count=1表示两个00
register int i;
int a[N],b[N];
printf("请输入坐标:\n");
for(i=0;i<N;i++)
{
while(scanf("%d %d",&a[i],&b[i])!=2) printf("格式不对请重新输入:\n");
if(a[i]==0&&b[i]==0)
{
if(count!=0) //前次输入不为00
count=0;
else //两个00跳出
break;
}
else
count++;
}
printf("输出结果:\n");
for(i=0;i<N;i++)
{
if(a[i]==0&&b[i]==0) //00打印结果
{
if(count!=0) //前次输入不为00
{
printf("%d %d %d %d \n",mina,minb,maxa,maxb);
count=0;
}
else
break;
}
else //非00则处理数据
{
if(count!=0)
{
mina=min(a[i],mina);
maxa=max(a[i],maxa);
minb=min(b[i],minb);
maxb=max(b[i],maxb);
}
else
{
mina=maxa=a[i];
minb=maxb=b[i];
}
count++;
}
}
getchar();
getchar();
return 0;
}