Hit or Miss

【原题链接】

【题意说明】

一幅52张牌,由4组1~13组成,现在把它给洗散!现有P个人来玩此游戏:首先52张洗好后的牌在第1个人手中,从1到13循环报数,每次报数都与最上面一张牌比较,当报到的数与最上面的一张牌一样时,把这张牌交给第2个人;否则把这张牌放在自己这叠牌的最下面!接着再报数!当第2个人手中有牌时(不管几张),他也开始报数!若他报数与他手中最上面一张牌值相同时,则他把这张牌交给第3个人!若此时手中没牌时,不再报数,若再次从上一个人手中得到牌时,则接着上一次报数往下继续报数(而不是从1开始)!最后一个人当报数与手中最上面一张牌值相同时,则直接丢掉,不再传给第1个人!

问:若整个游戏过程中,所有的牌都被丢掉,依次输出每个人最后交给下一个人牌值(最后一个人是丢掉的);否则输出unwinnable

【问题分析】

此题的题意比较难读明白,至少我读了十遍以上(E文不好!!),主要是卡在那个match,明白了match,又卡在第2个人什么时候报数,是等第1个人把所有的牌都交给了他,后面来才明白!!。

完全读明白了本题之后,它就是一个模拟!!每个人每次报数时报数值可能不一样,用个数组记录即可!然后就模拟!

(1)每次扫描一下所有的人,若有牌则进行报数处理,否则不予处理。

(2)结果条件是:要么所有的数都扔掉了,要么最多是52张牌处理了一轮(13次)都没有扔掉一张!此时尽然是个unwinnable的情况(其实这里还可以优化的,只是有点麻烦!52*13=676,模拟移动的次数最多也就52次,所最多移动也就13*52*52=35152次!也就没必要去优化了!!)

 

原文地址:https://www.cnblogs.com/ahmasoi/p/2766539.html