盒子(Box, UVa1587)
Posted vincent-yuan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了盒子(Box, UVa1587)相关的知识,希望对你有一定的参考价值。
题目:
给定6个矩形的长和宽wi 和 hi(1<=wi, hi<=1000),判断它们是否构成长方体的6个面。
分析
如果一组数据能构成长方体,则6个面满足:
a, b
a, b
a, c
a, c
b, c
b, c
其中 a<=b <= c
如果把输入的数据排序之后,很容易进行判断,即 1, 2组,3,4组,5,6 组分别相等。
且1,3的x相等,2,4的y相等,1组的y与5组的x相等。
c实现
#include<stdio.h> //定义结构体存储宽高 struct pallet{ int x; int y; }pallet[6]; //交换数据 void swap(int *a,int *b){ int t=*a; *a = *b; *b = t; } //对6个面排序,按 a,b; a,b; a,c; a,c; b,c;b,c; 总体为a<b<c void sort(){ for(int i=5;i>=0;i--){ for(int j=0;j<i;j++){ if(pallet[j].x>pallet[j+1].x){ swap(&pallet[j].x,&pallet[j+1].x); swap(&pallet[j].y,&pallet[j+1].y); }else if(pallet[j].x==pallet[j+1].x && pallet[j].y>pallet[j+1].y){ swap(&pallet[j].x, &pallet[j+1].x); swap(&pallet[j].y,&pallet[j+1].y); } } } } //检验如果满足如下条件,则impossible int check(){ if(pallet[0].x== pallet[1].x && pallet[0].y==pallet[1].y && pallet[2].x==pallet[3].x && pallet[2].y == pallet[3].y && pallet[4].x == pallet[5].x && pallet[4].y == pallet[5].y && pallet[0].x == pallet[2].x && pallet[2].y == pallet[4].y && pallet[0].y == pallet[4].x){ return 1; } return 0; } int main() { while(scanf("%d%d",&pallet[0].x, &pallet[0].y)==2){ //保证 x< y if(pallet[0].x > pallet[0].y){ swap(&pallet[0].x,&pallet[0].y); } for(int i=1;i<6;i++){ scanf("%d%d",&pallet[i].x,&pallet[i].y); if(pallet[i].x>pallet[i].y){ swap(&pallet[i].x,&pallet[i].y); } } sort(); if(check()){ printf("POSSIBLE "); }else{ printf("IMPOSSIBLE "); } } return 0; }
以上是关于盒子(Box, UVa1587)的主要内容,如果未能解决你的问题,请参考以下文章