UVa 127 纸牌游戏("Accordian" Patience)

本文介绍了UVa 127题的纸牌游戏——Accordian Patience,玩家需将52张牌按规则移动,相同花色或点数的牌可叠放。游戏遵循先左后右、先三后一的原则,空位由最左边的牌填补。解决此问题的关键是使用栈来存储牌,并采用链表数组实现,避免大规模数组移动。
摘要由CSDN通过智能技术生成

把52张牌从左到右排好,每张牌形成一个牌堆。当某张牌与它左边的那张牌或者左边第三张牌花色相同或点数相同,就把这张牌移动到那张牌系上面。移动后,在观察是否可以发生其他移动,移动卡牌的原则是,越左边的越先移动,如果能移动,优先移动三张的,牌堆有空隙的时候,立刻填补空隙。

要点:

  • 注意一下没牌把空隙补充,有牌的时候一张一张移动,而不是一堆一堆,因此牌的点数和花色不能直接覆盖,应该用stack存,因为涉及数组的移动,因此建议用链表,这里用数组链表来做。
#include<bits/stdc++.h>
using namespace std;

struct Card {
   
	stack<string> s;
	int left, right;
};

int main() {
   
    ios::sync_with_stdio(false);
    cin.tie(0);
	//freopen("in.txt", "r", stdin);
	//freopen("out.txt", "w", stdout);
	int cnt = 0;
	string s;

	while (cin >> s) {
   
		if (s == "#") break;
		cnt = 0;
		Card c[53];
		c[cnt].left = cnt - 1;
		c[cnt].right = cnt + 1;
		c[cnt].s.push(s);
		cnt++;

		while (cin >> s) {
   
			c[cnt].left = cnt 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值