UVa1587Box 盒子 紫書習題3-10 (終於做出來了)

本來題目不難, 這題花了近兩個半小時。原因總結:

1由於基礎的不紮實, struct 和 operator 認真回顧了一遍, struct 了一個face(面), 命名爲f[], 但是不能直接sort的, 所以在struct裏又弄了個重載 <, 便於sort, 這樣做比重寫sort要好。 

2對於==的返回值沒有及時考慮, 當做=一樣來使用, 三個量是否相等, 要分別用三個==和兩個&&連接, 不能直接三個==,導致卡了很久。以後不能再犯。

3不要因爲舍友的影響, 做好自己

代碼如下:

註釋寫得很認真, 錯誤也沒刪, 留着日後警示自己。

//xi3-10 UVa1587Box盒子.cpp 
#include <cstdio>
#include <algorithm>
using namespace std;
struct face{		//面 
	int l, w;
//	bool operator < (const NODE& rha) const{
//        if(h == rha.h) return w < rha.w;
//        return h < rha.h;
	bool operator < (const face& abc) const //照着別人搞的,好厲害- - 
	{									//這樣就支持sort了 
		if(l == abc.l) return w < abc.w; //重載<, f[]間用過l比較 
		return l < abc.l;
	}
}f[10];
//下面的沒用了 
//fswap(face f[a],face f[b])
//{
//	int templ, tempw;
//	templ = f[a].l;
//	f[a].l = f[b].l;
//	f[b].l = templ;
//	temp2 = f[a].w;
//	f[a].w = f[b].w;
//	f[b].w = temp2;
//}
//
//void simpleSort(f[], int n)
//{
//	int samll;
//	for (int i = 0; i < n-1; ++i)
//}
//bool ok() //a<b<c ab ab ac ac bc bc  
//{
//	if(f[0].l == f[1].l == f[2].l == f[3].l && //a
//	 f[0].w == f[1].w == f[4].l == f[5].l &&  //b
//	 f[2].w == f[3].w == f[4].w == f[5].w) //c 
//	 return true;
//	 else return false; // 錯在==的返回值是1、0 
//}
//bool ok()  //別人的, 也挺好看懂的 
//{
//	if(f[0].l != f[1].l) return 0;
//	if(f[0].w != f[1].w) return 0;
//	if(f[2].l != f[3].l) return 0;
//	if(f[2].w != f[3].w) return 0;
//	if(f[4].l != f[5].l) return 0;
//	if(f[4].l != f[5].l) return 0;// f[0]==f[1], f[2]==f[3], f[4]==f[5]
//	if(f[0].l != f[2].l) return 0;//a
//	if(f[0].w != f[4].l) return 0;//b
//	if(f[2].w != f[4].w) return 0;//c
//	return true;
//}

bool ok() //a<b<c ab ab ac ac bc bc  
{
	if(f[0].l == f[1].l && f[1].l == f[2].l && f[2].l == f[3].l && //a
	 f[0].w == f[1].w && f[1].w == f[4].l && f[4].l == f[5].l &&  //b
	 f[2].w == f[3].w && f[3].w == f[4].w && f[4].w == f[5].w) //c 
	 return true;
	 else return false; // 
}
int main()
{
	while(scanf("%d%d%d%d%d%d%d%d%d%d%d%d", &f[0].l,
	 &f[0].w, &f[1].l, &f[1].w, &f[2].l, &f[2].w,
	  &f[3].l, &f[3].w, &f[4].l, &f[4].w, &f[5].l, &f[5].w
	 ) == 12)														//有點醜, 不過一般就這樣吧? 
	{
		for(int i = 0; i < 6; ++i)
		{
			if(f[i].l > f[i].w) swap(f[i].l, f[i].w); //make l < w
		}
//		for(int i = 0; i < 6; ++i) printf("f[%d].l = %d\t", i, f[i].l),printf("f[%d].w = %d\n", i, f[i].w);

		sort(f, f+6); //f[]從小到大排 
//		for(int i = 0; i < 6; ++i) printf("f[%d].l = %d\t", i, f[i].l),printf("f[%d].w = %d\n", i, f[i].w);

//		printf("POSSIBLE\n");
		if(ok()) puts("POSSIBLE");
        else puts("IMPOSSIBLE");
	}
	return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章