1083 - 矩形问题

通过次数

0

提交次数

0

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

现给你若干矩形,矩形的边都平行于x轴和y轴,请你编程计算被其他矩形包含在内部的矩形的个数(如果内部的矩形的边与外部的矩形的边重合,也算作正确的结果)。

题目输入

输入包含多组测试数据。每组输入第一行是一个整数n(n<=100),表示矩形个数。
接下来n行,每行输入四个实数,分别表示矩形的最小x坐标、最大x坐标、最小y坐标、最大y坐标。

题目输出

对于每组输入,输出被其他矩形包含在内部的矩形的个数。

输入/输出样例

输入格式

3
100 101 100 101
0 3 0 101
20 40 10 400
4
10 20 10 20
10 20 10 20
10 20 10 20
10 20 10 20

输出格式

0
4

C语言解答

#include<stdio.h>

struct R
{
	double xmin,xmax,ymin,ymax;
}r[10000];

int main()
{
	int n,i,j,c;
	while(scanf("%d",&n)!=EOF)
	{
		for(i=0;i<n;i++)
			scanf("%lf%lf%lf%lf",&r[i].xmin,&r[i].xmax,&r[i].ymin,&r[i].ymax);
		for(c=i=0;i<n;i++)
			for(j=0;j<n;j++)
				if(i!=j&&r[i].xmin>=r[j].xmin&&r[i].xmax<=r[j].xmax&&r[i].ymin>=r[j].ymin&&r[i].ymax<=r[j].ymax)
				{
					c++;
					break;
				}
		printf("%d\n",c);
	}
	return 0;
}

C++解答

#include<stdio.h>

struct R
{
	double xmin,xmax,ymin,ymax;
}r[10000];

int main()
{
	int n,i,j,c;
	while(scanf("%d",&n)!=EOF)
	{
		for(i=0;i<n;i++)
			scanf("%lf%lf%lf%lf",&r[i].xmin,&r[i].xmax,&r[i].ymin,&r[i].ymax);
		for(c=i=0;i<n;i++)
			for(j=0;j<n;j++)
				if(i!=j&&r[i].xmin>=r[j].xmin&&r[i].xmax<=r[j].xmax&&r[i].ymin>=r[j].ymin&&r[i].ymax<=r[j].ymax)
				{
					c++;
					break;
				}
		printf("%d\n",c);
	}
	return 0;
}

Java解答



import java.util.Scanner;

public class Main{
	public static void main(String[] args){
		Scanner in=new Scanner(System.in);
		while(in.hasNext()){
			int n=in.nextInt();double[][] a=new double[n][4];
			for(int u=0;u<n;u++){
				for(int w=0;w<4;w++){
					a[u][w]=in.nextDouble();
				}
			}int c=0;
			  for(int i=0;i<n;i++){
                  for(int j=0;j<n;j++){
                          if(i!=j&&a[i][0]>=a[j][0]&&a[i][1]<=a[j][1]&&a[i][2]>=a[j][2]&&a[i][3]<=a[j][3])
                          {
                                  c++;
                                  break;
                          }
		}
	}System.out.println(c);}}
}