欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

枚举和暴力

程序员文章站 2022-06-07 14:38:59
...

铺地毯

为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有n张地毯,编号从1到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。
输入
第一行,一个整数n,表示总共有n张地毯。
接下来的n行中,第i+1行表示编号i的地毯的信息,包含四个正整数a,b,g,k,每两个整数之间用一个空格隔开,分别表示铺设地毯的左下角的坐标(a,b)以及地毯在x轴和y轴方向的长度。
第n+2行包含两个正整数x和y,表示所求的地面的点的坐标(x,y)。
输出
输出共1行,一个整数,表示所求的地毯的编号;若此处没有被地毯覆盖则输出-1。
枚举和暴力
思路:这个题目其实很简单,就是判断输入的点是否在给的长方形内,并且找到最上面覆盖那个。
开始我的思路是从第一个开始循环,如果找到一个就++,但是提交后错误,后来发现问题所在之处就是在比如这个点是被1和3覆盖,如果找到就加加,那么输出就是2,并不是最上面的序号3.所以不能用加加,应该直接赋值,符合一个就把序号赋值。
写完后发现,如果这样从头开始找那么每个都会遍历一遍,倒不如从最末尾开始找,因为是要找最上面那一个,找到就break即可。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n=scanner.nextInt(),flag=-1;
        int[][] size=new int[n][4];
        for (int i=0;i<size.length;i++){
            for (int j=0;j<size[i].length;j++){
                size[i][j]=scanner.nextInt();
            }
        }
        int x=scanner.nextInt(),y=scanner.nextInt();
        for (int i=n-1;i>=0;--i){
            if(x>=size[i][0] && x<=(size[i][0]+size[i][2]) && y>=size[i][1] && y<=(size[i][1]+size[i][3])){
                flag=i+1;
                break;
            }
        }
        System.out.println(flag);
    }
}
相关标签: 入门算法