sicily 1003之模拟题

来源:互联网 发布:指向整型数组的指针 编辑:程序博客网 时间:2024/06/09 17:03

题目在这里1003

这是一道模拟题。题目意思是:

1、很多玩家排排坐

2、第一个玩家拿到一堆以某种顺序弄好的52张卡牌堆(每种花色13张,4中花色)

3、从第一个玩家开始,每个玩家都从1-13报数,每报一个数,查看一下自己的牌堆中最上面的一张牌,如果跟报的数一样,那么把这张牌传给下一个玩家,放在下一个玩家牌堆最后,最后一个玩家直接将牌弃掉。如果不一样,那么把这张牌放到自己的牌堆最后

4、报的数跟牌堆最上面的牌的数字一样,称作一次match;不一样,称作不match。无论是match还是不match,这个人的报数已经完成了,需要轮到下一个玩家报数了。同时,下次再轮到这个玩家的时候,从之前停下的数字开始报

比如:A报了1,发现手上的牌是2,那么把这张牌放到自己牌堆的最后,然后轮到下一个玩家B开始报数;轮完一圈过后,又轮到A,此时A从2开始报数

5、手上没牌的玩家不能报数,需要等到上一个玩家把match的牌传到他手上,即等到手上有牌,才能开始报数。道理跟4一样,如果B玩家手上有一张4,而轮到他报数的时候,他报的就是4,那么手上就没牌了。下一轮,如果B的上家没有传牌给B,那么B不能报数,直接跳过。等到若干次后,B的上家传给B牌了,此时B从5开始报数

好了,大概的题意就是这样,最后输出的是每个玩家最后丢掉的牌,这里的丢掉包括把牌传给下一个玩家。如果没有办法把这堆牌丢完,那么返回unwinnable。

题目意思就是这样,我判断是否丢完的方法比较暴力,就是让它循环很多次,我设置的是10000,如果达到这个次数还没有完成,那么就是unwinnable,否则在这之前完成了,就会直接返回。

另外,再说一句:模拟题重要的是理解题意,题意理解了,整道题还是比较简单的。用自己最先想到的方法去解,基本上都能写出来,也不会出现恶心的超时错误。

代码如下,仅供参考:

#include<iostream>#include<queue>#include<string.h>using namespace std;queue<int> deck[10];int people[10], players, ans[10];bool play_games(){int times = 10000, tmp;while (times--){for (int i = 0; i < players; i++){if (deck[i].empty())continue;tmp = (people[i] + 1) % 13 == 0 ? 13 : (people[i] + 1) % 13;if (deck[i].front() == tmp){if (i != players - 1)deck[i + 1].push(deck[i].front());if (i == 0){if (deck[i].size() == 1)ans[i] = deck[i].front();}else{if (deck[i - 1].empty() && deck[i].size() == 1)ans[i] = deck[i].front();}deck[i].pop();}else{deck[i].push(deck[i].front());deck[i].pop();}people[i] = tmp;}int empty_num = 0;for (int i = 0; i < players; i++){if (deck[i].empty())empty_num++;}if (empty_num == players)return true;}return false;}int main(){int amount, card;cin >> amount;for (int i = 1; i <= amount; i++){memset(people, 0, sizeof(people));memset(ans, 0, sizeof(ans));cin >> players;for (int j = 0; j < 52; j++){cin >> card;deck[0].push(card);}cout << "Case " << i << ":";if (play_games()){for (int j = 0; j < players; j++)cout << " " << ans[j];cout << endl;}else{cout << " unwinnable" << endl;}for (int j = 0; j < 10; j++){while (!deck[j].empty()){deck[j].pop();}}}//system("pause");return 0;}


0 0
原创粉丝点击