1640 - 最小长方形

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内。长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内。

题目输入

测试输入包含若干测试用例,每个测试用例由一系列坐标组成,每对坐标占一行,其中|x|和|y|小于 1000;一对0 坐标标志着一个测试用例的结束。注意(0, 0)不作为任何一个测试用例里面的点。一个没有点的测试用例标志着整个输入的结束。

题目输出

对每个测试用例,在1行内输出2对整数,其间用一个空格隔开。第1对整数是长方形框左下角的坐标,第2对整数是长方形框右上角的坐标。

输入/输出样例

输入格式

-41 35
26 45
13 30
0 0
-5 13
0 0
0 0

输出格式

-41 30 26 45
-5 13 -5 13

C语言解答

#include <stdio.h>
int main()
{
  while(1)
  {
    int minx=1000;
    int maxx=-1000;
    int miny=1000;
    int maxy=-1000;
    int x,y;
    int flag=0;
    while(1)
    {
      scanf("%d%d",&x,&y);
      if(x==0&&y==0)
      {
        if(flag==0)
        {
          return 0;
        }
        flag=0;
        printf("%d %d %d %d\n",minx,miny,maxx,maxy);
        break;
      }
      if(flag==0)
      {
        flag=1;
      }
      if(minx>x)
      {
        minx=x;
      }
      if(miny>y)
      {
        miny=y;
      }
      if(maxx<x)
      {
        maxx=x;
      }
      if(maxy<y)
      {
        maxy=y;
      }
    }
  }
}

C++解答

#include <cstdio>
#include <cstring>

void updatemin(int & minv, int v) {
    if (v < minv) minv = v;
}

void updatemax(int & maxv, int v) {
    if (v > maxv) maxv = v;
}

int main() {
    while (true) {
        int x, y;
        scanf("%d %d", &x, &y);
        if (0 == x && 0 == y)
            break;
        int minx = x, miny = y;
        int maxx = x, maxy = y;
        while (true) {
            scanf("%d %d", &x, &y);
            if (0 == x && 0 == y)
                break;
            updatemin(minx, x);
            updatemin(miny, y);
            updatemax(maxx, x);
            updatemax(maxy, y);
        }
        printf("%d %d %d %d\n", minx, miny, maxx, maxy);
    }
    return 0;
}

Java解答

import java.util.*;

public class Main{
 final static Scanner jin=new Scanner(System.in);
  public static void main(String args[]){
   	int x,y;
    boolean flag=true;
    while(flag){
      x=jin.nextInt();
      y=jin.nextInt();
      if(x==0&&y==0)flag=false;
      if(flag){
     	 int mx=x,Mx=x,my=y,My=y;
         boolean sflag=true;
         while(sflag){
        	 x=jin.nextInt();
        	 y=jin.nextInt();
           if(x==0&&y==0)sflag=false;
         	if(sflag){
     	     if(x>Mx)Mx=x;
     	  	 if(x<mx)mx=x;
     	  	 if(y>My)My=y;
     	  	 if(y<my)my=y;
           }
     	 }
     	 System.out.println(mx+" "+my+" "+Mx+" "+My);
        sflag=true;
      }
    }
  }
}