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;}
- sicily 1003之模拟题
- sicily 1018之模拟题
- Sicily期末算法模拟题
- Sicily 算法模拟题 1001
- Sicily 1097 LED Modding(模拟题)
- Sicily.1041. Pushing Boxes(模拟题)
- sicily 1172之水题
- 第十七周:[Sicily]机考模拟题1000-1006
- 第十九周:[sicily] 算法机考模拟题
- Sicily 无环图 | 算法期末机考模拟题
- Sicily 相连的1 | 算法期末机考模拟题
- Sicily 会议安排 | 算法期末机考模拟题
- Sicily 最大和 | 期末算法机考模拟题
- sicily考试模拟题-1003相连的1 1004isDAG? 1005相邻的数 1006单词变换
- sicily 1428之水题一道
- Sicily 1735 Encryption (模拟)
- sicily 1156之约定俗成
- sicily 1063之迭代器
- 实例学习gcc+gdb+make
- Mongodb+php简单入门教程
- UVALIVE 3305 Tour
- 改变世界的17个等式
- 自动化测试robot framework学习笔记
- sicily 1003之模拟题
- Hibernate的dialect大全
- 二分查找题目汇总
- 滤波器设计指标
- 浅谈个人对Java多态性的理解
- 数字信号处理中各种频率关系
- poj2243~双向bfs
- 浅谈Java泛型中的extends和super关键字
- 学习FPGA的网站推荐