UVa 246 10-20-30 游戏(10-20-30)

这篇博客介绍了UVa 246问题,即10-20-30游戏的玩法。游戏过程中,52张牌按特定规则排列并进行操作,当特定条件满足时可以从牌堆中移除牌并加入手牌。关键在于理解三种移牌条件的优先级,并在执行操作后检查是否能继续消除。博主强调了注意输入牌在手牌中的位置、处理无牌的牌堆以及尽可能连续消除牌的重要性。最终输出值反映了游戏过程中的牌消耗情况。
摘要由CSDN通过智能技术生成

题目:
52张牌叠放在一起,注意,先输入的牌在顶端,然后从上面依次拿出一张从左到右排成一条直线放在桌子上,每张牌代表一个牌堆,然后每次取出手中最上面的一张牌,从左到右依次放在各个牌堆的下面。当往最右边的牌堆放牌后,重新往最左边的牌堆放牌。
满足以下三种条件时,可以把牌从牌堆上拿走,并按从上到下的顺序加入手牌,放置于手牌最底端。 例如 从上到下消掉的牌为
1 2 3 那么牌堆的底部情况如右 牌 牌 1 2 3 牌堆底部。
三种条件分别是
牌堆的最上面两张牌和最下面一张牌的和为 10的倍数,拿走,放入手牌
牌堆的最上面一张牌和最下面两张牌的和为 10的倍数, 拿走,放入手牌
牌堆的最下面三张牌的和为10的倍数 拿走,放入手牌
以上三种情况越前面的越优先执行,执行后,再判断可否继续再执行,即不急着给下一个牌堆放牌。

要点:

  • 大部分上面都提到了
  • 需要关注的就是 输入牌在手牌的位置没有牌的牌堆要移除能连续消牌就消
  • 输出的那个值,是从放第一张牌开始的,包括一开始给每个牌堆放一张牌至七张牌消耗的七张牌。
#include<bits/stdc++.h>
using namespace std;

vector<deque<int>> pile;
set<vector<deque<int>>> s;
bool isEmpty[8];
int t = 14;  //已经发完14张牌了
// 0表示总牌堆 1 - 7 表示剩余牌堆

//初始化牌堆
void init(int x) {
   
	t = 14;
	memset(isEmpty, false, sizeof(isEmpty));
	pile.clear();
	s.clear();
	pile.resize(8);
	pile[0].push_back(x);
	int a;
	for (int i = 2; i <= 52; i++) {
   
		cin >> a;
		// cout << a << endl;
		pile[0].push_back(a);
	}
	for (int i = 1; i <= 14; i++) {
   
		int v = pile[0].front();
		pile[0].pop_front();
		pile[(i - 1) % 7 + 1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值