UVa1587--Box--盒子(自认为代码很好理解)

题意就是判断6个面能否组成一个长方体

做这道题的时候,想着,老子一定要用自己的方法,如果AC了,我一定要发题解!真的太不容易了。

一个晚上的时间终于把这道题给AC了。

思路:一个长方体有长宽高,有六个面,2长宽、2长高、2宽高,如果我能把输入的数值的种类提取出来并记录这些数值,种类数>3则不能围成长方体。
接着遍历输入的每一行数值,如果输入的一行数值不是长
宽、长高、宽高的一种,则说明不能围成长方体;建立cnt[3]数组,如果是长宽,cnt[0]++;长高,cnt[1]++;宽*高,cnt[2]++;

如果是三边都不相等的长方体,则:cnt[0]=cnt[1]=cnt[2]=2
如果长方体有两边相等,则说明有cnt[0]=4或cnt[1]=4或cnt[2]=4;
如果为正方体,则cnt[0]=6;

若满足以上三个条件的一个,说明可围成长方体。

蒻蒻的代码如下:(如有错误,望大神指出)

#include
using namespace std;
int main()
{
	int a[15];
	while(cin>>a[0]){
		int num[15]={0},cnt[3]={0},count=1,i,j,flag=0;
		num[0]=a[0];
		for(i=1;i<12;i++)
		{
			flag=0;
			cin>>a[i];
			for(j=0;j3)
		{
			printf("IMPOSSIBLE\n");
			continue;
		}
		if(count==1)
		{
			printf("POSSIBLE\n");
			continue;
		}
		for(i=0;i<12;i+=2){
			if((a[i]==num[0]&&a[i+1]==num[1])||(a[i]==num[1]&&a[i+1]==num[0]))
				cnt[0]++;//长宽
			else if((a[i]==num[0]&&a[i+1]==num[2])||(a[i]==num[2]&&a[i+1]==num[0]))
				cnt[1]++;//长高
			else if((a[i]==num[2]&&a[i+1]==num[1])||(a[i]==num[1]&&a[i+1]==num[2])) 
				cnt[2]++;//宽高 
		}
		//cout<

最后:做了几道题目,总结了一下,觉得while(1) 不要乱用,容易死循环,如果用,一定要记得有break条件。

噢对,还有最重要的一点,想思路的时候不能光看一种,多想一些特殊情况

你可能感兴趣的:(UVa1587--Box--盒子(自认为代码很好理解))