您的位置:首页 > 其它

UVA - 127 "Accordian" Patience

2014-09-26 21:35 423 查看
题目大意:给出52张扑克,要求向左匹配,如果匹配到了就把该扑克放在最上面,问最后有几堆扑克,每堆有几张

解题思路:暴力匹配

#include<cstring>
#include<cstdio>

struct Card {
	char c[52][2];
	int number;
};

Card card[52];

int main() {
	while(1) {
		char mark;
		int count = 52;
		mark = getchar();
		if(mark == '#')
			break;
		card[0].c[0][0] = mark;
		card[0].c[0][1] = getchar();
		card[0].number = 1;
		getchar();

		for(int i = 1; i < count; i++) {
			card[i].c[0][0] = getchar();
			card[i].c[0][1] = getchar();
			getchar();	
			card[i].number = 1;
		}
		/*		for(int i = 0 ; i < count; i++)
				printf("%s  ", card[i].c[0]);	

*/
		for(int i = 0; i < count; i++) {

			if(i - 3 >= 0 && (card[i].c[card[i].number - 1][0] == card[i - 3].c[card[i-3].number-1][0] || card[i].c[card[i].number - 1][1] == card[i - 3].c[card[i-3].number-1][1])  ) {//  判断当前的左边的第三个是否同花色或者同数字
				card[i - 3].c[card[i - 3].number][0] = card[i].c[card[i].number - 1][0];//将当前的数字赋值给左边第三个	
				card[i - 3].c[card[i - 3].number][1] = card[i].c[card[i].number - 1][1];//将当前的花色赋值给左边的第三个
				card[i-3].number++;
				card[i].number--;//移走一位相对减1

				if(card[i].number == 0) {
					for(int j = i; j < count; j++)
						card[j] = card[j+1];//如果当前的以为空,则向左移,并且count--;
					count--;	
				}
				i = -1;
			}

			if(i - 1 >= 0 && (card[i].c[card[i].number - 1][0] == card[i - 1].c[card[i-1].number-1][0] || card[i].c[card[i].number - 1][1] == card[i - 1].c[card[i-1].number-1][1])  ) {
				card[i - 1].c[card[i - 1].number][0] = card[i].c[card[i].number - 1][0];	
				card[i - 1].c[card[i - 1].number][1] = card[i].c[card[i].number - 1][1];
				card[i-1].number++;
				card[i].number--;

				if(card[i].number == 0) {
					for(int j = i; j < count; j++)
						card[j] = card[j+1];
					count--;	
				}
				i = -1;
			}//  判断当前的和左边三个是否相同	
		}
			printf("%d pile%s remaining: ",count, count != 1? "s":"");
		for(int i = 0; i < count; i++) {
			printf("%d",card[i].number);	
			if(i != count - 1)
				printf(" ");
			else
				printf("\n");
		}
	}
	/*
	   for(int i = 0 ; i < count; i++) {
	   for(int j = 0; j < card[i].number; j++)
	   printf("%s", card[i].c[j]);
	   printf("\n");
	   }
	   */
	return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: