算法竞赛入门经典:UVA1587 Box(Java版)

题意:给定6个矩形的长和宽wi和hi(1<=wi,hi<=1000),判断它们能否构成长方体的六个面。

思路:如下图,先按照大小顺序排列整齐,再将输入的六组长宽整型数组转化为如图形式,根据长方体6面两两长宽对应,以及3条公共边,得出判断条件。这种方法比较简单粗暴。(这题正方体也属于长方体哦!)

                                                         —————>>                   

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    while(in.hasNext()) {
        int[] l = new int[6];//长
        int[] r = new int[6];//宽
        int t = 0;
        for(int i = 0;i<6;i++) {
        	l[i] = in.nextInt();
        	r[i] = in.nextInt();
        	if(l[i]<r[i]){//长放右宽放左
                t=l[i];
                l[i]=r[i];
                r[i]=t;
            }
        }
        for(int i = 0;i<l.length;i++) {//两列各自从大到小排列
            for(int j = 0;j<l.length-1-i;j++) {//长列
                if(l[j]<l[j+1]) {
                	t = l[j];
                    l[j] = l[j+1];
                    l[j+1] = t;
                    t= r[j];
                    r[j] = r[j+1];
                    r[j+1] =t;
                }
                if(l[j]==l[j+1]&&r[j]<r[j+1]) {//宽列
                        t= r[j];
                        r[j] = r[j+1];
                        r[j+1] = t;
                }
            }
        }
        boolean f = true;
        for(int i=0;i<5;i=i+2){
        	if(l[i]!=l[i+1]||r[i]!=r[i+1])//6面两两对应
        		f=false;
        }
        if(l[0]!=l[2]||r[0]!=l[4]||r[2]!=r[4])//3条公共边
            f = false;
        if(f)
            System.out.println("POSSIBLE");
        else
            System.out.println("IMPOSSIBLE");
    }
    in.close();
  }
}

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值