首页 > 试题广场 >

最小的矩形

[编程题]最小的矩形
  • 热度指数:1445 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
牛牛在二维坐标系中画了N个点,且都是整点。现在牛牛想画出一个矩形,使得这N个点都在矩形内或者在矩形上。
矩形的边均平行于坐标轴。牛牛希望矩形的面积最小。请你帮助牛牛计算下最小矩形的面积。

输入描述:
首先输入一个正整数N表示点的个数(2 <= N <= 50)
接下来N行每行两个整数x, y,表示该点的坐标。绝对值均小于等于100.


输出描述:
一个整数表示最小矩形的面积。
示例1

输入

2
0 1
1 0

输出

1
#include <iostream>
#include <cmath>
#include <string>
using namespace std;


int main(int argc, const char * argv[]) {
    int N;
    cin>>N;
    int x,y;
    int X[N],Y[N];
    for(int i=0;i<N;i++){         cin>>X[i]>>Y[i];
    }
    int minX=X[0],maxX=X[0],minY=Y[0],maxY=Y[0];
    for(int i=0;i<N;i++){
        if(X[i]<minX){
            minX=X[i];
        }
        if(X[i]>maxX){
            maxX=X[i];
        }
        if(Y[i]<minY){
            minY=Y[i];
        }
        if(Y[i]>maxY){
            maxY=Y[i];
        }
    }
    int area = (maxX-minX)*(maxY-minY);
    cout<<area;
    return 0;
}

发表于 2017-11-07 17:24:54 回复(0)
更多回答
#include<iostream>
using namespace std;
int findmin(int x[],int n)
{
    int ret = 100;
    for(int i=0;i<n;i++)
        if(ret > x[i])
            ret = x[i];
    return ret;
}
int findmax(int x[],int n)
{
    int ret = -100;
    for(int i=0;i<n;i++)
        if(ret < x[i])
            ret = x[i];
    return ret;
}

int main()
{
    int n;
    cin >> n;
    int x[n],y[n];
    for(int i=0;i<n;i++)
    {
        cin >> x[i] >> y[i];
    }
    int x1,x2,y1,y2;
    x1 = findmin(x,n);
    x2 = findmax(x,n);
    y1 = findmin(y,n);
    y2 = findmax(y,n);
    int ret = (x2-x1)*(y2-y1);
    cout <<ret;
    return 0;
    
}

发表于 2017-09-01 11:02:35 回复(0)
#include <iostream>
using namespace std;
int main(){
    int N,x,y,T,B,L,R,i;
    cin>>N;
    for(i=0;i<N;++i){
        cin>>x>>y;
        L=(i==0||x<L)?x:L;
        R=(i==0||x>R)?x:R;
        B=(i==0||y<B)?y:B;
        T=(i==0||y>T)?y:T;
    }
    cout<<(T-B)*(R-L)<<endl;
}


发表于 2017-04-09 20:06:20 回复(0)
import java.util.Scanner; 
public class Main{
    static Scanner in = new Scanner(System.in);
    public static void main(String[] args) {
        int n = in.nextInt();
        int maxX = Integer.MIN_VALUE,minX = Integer.MAX_VALUE;
        int maxY = Integer.MIN_VALUE,minY = Integer.MAX_VALUE;
        for(int i=1;i<=2*n;i++){
            int nums = in.nextInt();
            if(i%2 ==0){
                if(maxY < nums) maxY = nums;
                if(minY > nums) minY = nums;
            }else{
                if(maxX < nums) maxX = nums;
                if(minX > nums) minX = nums;
            }
        }
        int y = maxY - minY;
        int x = maxX - minX;
        System.out.println(y*x);
    }       
}

发表于 2017-03-29 21:20:01 回复(0)
# -*- coding: utf-8 -*- N = int(raw_input())
list_x_y = [] for i in xrange(0, N):
    list_x_y.append(map(int, raw_input().split()))
x = zip(*list_x_y)[0]
y = zip(*list_x_y)[1]
x_min = min(x)
x_max = max(x)
y_min = min(y)
y_max = max(y)
s = (x_max - x_min)*(y_max - y_min) print s

发表于 2017-05-04 22:35:42 回复(0)
#include<iostream>
#include<limits>
using namespace std;
int main()
{
    int n;
    cin >> n;
    int x,y;
    int min_x = INT16_MAX;
    int min_y = INT16_MAX;
    int max_x = INT16_MIN;
    int max_y = INT16_MIN;
    while(n--)
    {
        cin >> x >> y;
        min_x = min(min_x,x);
        max_x = max(max_x,x);
        min_y = min(min_y,y);
        max_y = max(max_y,y);
    }
    cout << (max_x-min_x)*(max_y-min_y);
}

发表于 2020-06-12 01:48:04 回复(0)
import sys
 
try:
    while True:
        n = int(input())
        x = [0 for _ in range(n)]
        y = [0 for _ in range(n)]
        for i in range(n):
            temp = list(map(int, input().split()))
            x[i] = temp[0]
            y[i] = temp[1]
        Smax = (max(x)-min(x))*(max(y)-min(y))
        print(Smax)
except:
    pass

发表于 2020-03-19 22:32:48 回复(0)
#include <iostream>
usingnamespacestd;
intmain()
{
    intn ,i ,x,y,x_min,x_max,y_min,y_max;
    while(cin>>n){
    for(i = 0;i<n;++i)
    {
        cin>>x>>y;
        x_min =( i==0 || x < x_min ) ? x : x_min;
        x_max =( i==0 || x > x_max ) ? x : x_max;
        y_min =( i==0 || y < y_min ) ? y : y_min;
        y_max =( i==0 || y > y_max ) ? y : y_max;
    }
        }
    cout << (x_max - x_min)*(y_max - y_min)<<endl;
    return0;
}
发表于 2019-10-31 11:45:46 回复(0)
	public static int juxing(int[] xarrys, int[] yarrys) {
		int left = xarrys[0];
		int right = xarrys[0];
		int top = yarrys[0];
		int bottom = yarrys[0];

		for (int i = 1; i < xarrys.length; i++) {
			int x = xarrys[i];
			int y = yarrys[i];

			if (x < left) {
				left = x;
			}

			if (x > right) {
				right = x;
			}

			if (y > top) {
				top = y;
			}

			if (y < bottom) {
				bottom = y;
			}
		}

		return (right - left) * (top - bottom);

	}

发表于 2019-08-13 15:45:27 回复(0)
暴力破解。。。(= =有稍微低点的法子么。。。感觉这样写好low....)

#include<iostream>
using namespace std;
int main(){
    int N,tmp_X,tmp_Y,max_X=-999,min_X=999,max_Y=-999,min_Y=999;
    cin>>N;
    for(int i=0;i<N;++i){
        cin>>tmp_X>>tmp_Y;
        if(tmp_X>=max_X) max_X=tmp_X;
        if(tmp_X<min_X) min_X=tmp_X;        
        if(tmp_Y>=max_Y) max_Y=tmp_Y;
        if(tmp_Y<min_Y) min_Y=tmp_Y;
        
    }
    //cout<<max_X<<" "<<min_X<<" "<<max_Y<<" "<<min_Y;
    cout<<(max_X-min_X)*(max_Y-min_Y);
    
    return 0;
}
发表于 2018-12-18 22:45:21 回复(0)
python解法:先取出x,y,再分别求x,y大小
importsys
listl,listr=[],[]
fori,v inenumerate(sys.stdin.readlines()):
    ifi!=0:
        listl.append(int(v.strip().split()[0]))
        listr.append(int(v.strip().split()[1]))
minx,miny,maxx,maxy=min(listl),min(listr),max(listl),max(listr)
print((maxx-minx)*(maxy-miny))
发表于 2018-07-19 00:54:11 回复(0)
#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
struct point {
    intxpos;
    intypos;
};
typedef struct point POINT;
bool istrue(POINT point1, POINT point2) {
    returnpoint1.xpos>point2.xpos;
}
bool istrue1(POINT point1, POINT point2) {
    returnpoint1.ypos>point2.ypos;
}
voidwork() {
    intnum;
    vector<POINT> vec;
    cin >> num;
    for(inti = 0; i<num; ++i) {
        POINT _point;
        intx, y;
        cin >> x >> y;
        _point.xpos = x;
        _point.ypos = y;
        vec.push_back(_point);
    }
    sort(vec.begin(), vec.end(), istrue);
    POINT xmax = *(vec.begin());
    POINT xmin = *(vec.end() - 1);
    sort(vec.begin(), vec.end(), istrue1);
    POINT ymax = *(vec.begin());
    POINT ymin = *(vec.end() - 1);
    cout << abs(xmax.xpos - xmin.xpos)*abs(ymax.ypos - ymin.ypos) << endl;
}
intmain() {
    work();
    return0;
}

发表于 2017-11-09 13:21:43 回复(0)
#include <iostream>
#include <algorithm>
using namespace std;

int main(int argc, const char * argv[]) {
    int n;
    cin>>n;
    int p[n][2];
    for (int i = 0; i < n; i++) {
        cin>>p[i][0]>>p[i][1];
    }
    int x[n], y[n];
    for (int i = 0; i < n; i++) {
        x[i] = p[i][0];
        y[i] = p[i][1];
    }
    sort(x, x + n);
    sort(y, y + n);
    cout<<(x[n - 1] - x[0]) * (y[n - 1] - y[0]);
    return 0;
}
发表于 2017-10-19 13:43:47 回复(0)
天啦,一次编码即运行通过,哈哈,不过是暴力......................
#include <iostream>
#include <cstdlib>
#include <math.h>

using namespace std;

void minOrMax(int a[],int &min,int &max,int length){
    max=min=a[0];
    for(int i=0;i<length;i++){
        if(a[i]<min){
            min = a[i];
        }
        if(a[i]>max){
            max = a[i];
        }
    }
}

int main(int argc, char** argv) {
    int n;
    cin>>n;
    int x[n];
    int y[n];
    
    for(int i=0;i<n;i++){
        cin>>x[i]>>y[i];
    }
    
    int xMin,xMax,yMin,yMax;
    minOrMax(x,xMin,xMax,n);
    minOrMax(y,yMin,yMax,n);
    
    int result = abs(xMin-xMax) * abs(yMin-yMax);
    cout<<result;
    return 0;
}


发表于 2017-09-12 20:34:52 回复(0)
var n = readline();
var x=[],y=[];
while(input = readline()){
var inputs = input.split(" ");
x.push(parseInt(inputs[0]));
y.push(parseInt(inputs[1]));
}
var x_min = Math.min.apply(this,x);
var x_max = Math.max.apply(this,x);
var y_min = Math.min.apply(this,y);
var y_max = Math.max.apply(this,y);
var result = (x_max-x_min)*(y_max-y_min);
console.log(result);
发表于 2017-09-10 10:17:48 回复(0)
import java.util.*;
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int arrX[]=new int[n];
int arrY[]=new int[n];
        int i=0;
        while(i<n){
        arrX[i]=sc.nextInt();
        arrY[i]=sc.nextInt();
        i++;
        }
       Arrays.sort(arrX);
       Arrays.sort(arrY);
       int x=arrX[arrX.length-1]-arrX[0];
       int y=arrY[arrY.length-1]-arrY[0];
       int res=x*y;
       System.out.println(res);
}
sc.close();
}
}
发表于 2017-08-23 09:38:55 回复(0)
import java.util.Arrays;
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
        int n =sc.nextInt();
        int [] arrx = new int[n];
        int [] arry = new int [n];
        for(int i=0;i<n;i++){
        arrx[i]=sc.nextInt();
        arry[i]=sc.nextInt();
        }
        Arrays.sort(arrx);
        Arrays.sort(arry);
        int x = arrx[n-1] - arrx[0];
        int y = arry[n-1] - arry[0];
        System.out.println(x*y);
        }
    }
}

发表于 2017-07-09 17:28:05 回复(0)
#include<iostream>

using namespace std;

int main(){
    int N;
    int x[51],y[51];
    cin>>N;
    for(int i=0;i<N;i++){
        cin>>x[i]>>y[i];
    }
    
    int maxX=-100,maxY=-100,minX=100,minY=100;
    for(int i=0;i<N;i++){
        if(x[i]>maxX){
            maxX=x[i];
        }
        if(x[i]<minX){
            minX=x[i];
        }
        if(y[i]>maxY){
            maxY=y[i];
        }
        if(y[i]<minY){
            minY=y[i];
        }
    }
    cout<<(maxX-minX)*(maxY-minY);
    return 0;
}
发表于 2017-06-27 22:23:32 回复(0)
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <cmath>

int main(){
	using namespace std;
	int n;
	while(cin >> n){
		vector<int> l(n);
		vector<int> w(n);
		for(int i = 0; i < n; i ++)
			cin >> l[i] >> w[i];
		sort(l.begin(), l.end());
		sort(w.begin(), w.end());
		int x = l[l.size() - 1] - l[0];
		int y = w[w.size() - 1] - w[0];
		cout << x * y << endl;
	}
	return 0;
}

发表于 2017-04-14 11:05:16 回复(0)
inputNum=int(raw_input())
listNum=[1]*inputNum
x=[1]*inputNum
y=[1]*inputNum
fori in range(inputNum):
    listNum[i]=raw_input()
    x[i]=int(listNum[i].split()[0])
    y[i]=int(listNum[i].split()[1])
 
xLen=max(x)-min(x)
yLen=max(y)-min(y)
print xLen*yLen

发表于 2017-04-11 13:16:35 回复(0)

热门推荐

通过挑战的用户