C++ 看不懂问题 提供一下思路呗
题目描述Asyouknow,13-14!=1。(^@^)但是蓝神偏不信。所以,现在问题来了。你要与蓝神通过我们最喜欢的游戏——戳气球一决胜负。现有...
题目描述
As you know,13-14!=1。(^@^) 但是蓝神偏不信。所以,现在问题来了。你要与蓝神通过我们最喜欢的 游戏——戳气球一决胜负。 现有n个气球,你和蓝神轮流戳爆气球。 有两种规则:①每人每次可戳爆1-3 个气球,②每人每次可戳爆1-5个气球。规定最后一个戳爆气球,即把气球戳完的人赢。 现由你选定一种 规则,然后蓝神先戳。请记住你和蓝神都想努力地赢得对方。所以,真正的问题来了,请问谁能赢。
输入
t组测试数据 对于每组测试数据,输入一个数字n(1<=n<=10^5)。
输出
如果你赢,输出“Oh,yes.”(没有引号);如果蓝神赢,输出“Oh,my dear.” (没有引号,占一行)。
样例输入
3
105
10
20
样例输出
Oh,my dear.
Oh,my dear.
Oh,yes. 展开
As you know,13-14!=1。(^@^) 但是蓝神偏不信。所以,现在问题来了。你要与蓝神通过我们最喜欢的 游戏——戳气球一决胜负。 现有n个气球,你和蓝神轮流戳爆气球。 有两种规则:①每人每次可戳爆1-3 个气球,②每人每次可戳爆1-5个气球。规定最后一个戳爆气球,即把气球戳完的人赢。 现由你选定一种 规则,然后蓝神先戳。请记住你和蓝神都想努力地赢得对方。所以,真正的问题来了,请问谁能赢。
输入
t组测试数据 对于每组测试数据,输入一个数字n(1<=n<=10^5)。
输出
如果你赢,输出“Oh,yes.”(没有引号);如果蓝神赢,输出“Oh,my dear.” (没有引号,占一行)。
样例输入
3
105
10
20
样例输出
Oh,my dear.
Oh,my dear.
Oh,yes. 展开
展开全部
博弈论问题,可以用反推法
取胜者最后一次戳爆的气球数x一定满足1≤x≤3或1≤x≤5(取决于采取方案①还是②)
即落败者最后一次戳气球时剩余气球数一定为4(这里假设采用方案①,下同),为3或为5都会导致失败。由于双方都采取最优策略,可推得落败者倒数第二次戳气球时剩余气球数一定为8。所以你会发现这个问题实际上是一个同余问题。只要轮到你戳气球时,保证戳完后剩余气球数x满足x≡0(mod 4)即可取胜。为了满足这一条件,你需要:①在对方每次戳完气球后,自己下次戳爆的气球数和对方本轮戳爆气球数之和为4;②保证对方第一次戳球后剩下球数x不满足x≡0(mod 4)
若能满足条件①和②,则此游戏一定取胜。否则,必须采取方案二,尝试使对方每次戳球前总球数满足x≡0(mod 6)。若方案二也不能满足,则此游戏必败。
而你会发现,条件②实际上就相当于总球数n≡0(mod 4)。因此,当总球数n能被4整除时,应该采用方案①;同理,当总球数n能被6整除时,应该采用方案②。得到结论:当总球数n为4或6的倍数时,这个游戏可以取胜;否则,必定失败。
取胜者最后一次戳爆的气球数x一定满足1≤x≤3或1≤x≤5(取决于采取方案①还是②)
即落败者最后一次戳气球时剩余气球数一定为4(这里假设采用方案①,下同),为3或为5都会导致失败。由于双方都采取最优策略,可推得落败者倒数第二次戳气球时剩余气球数一定为8。所以你会发现这个问题实际上是一个同余问题。只要轮到你戳气球时,保证戳完后剩余气球数x满足x≡0(mod 4)即可取胜。为了满足这一条件,你需要:①在对方每次戳完气球后,自己下次戳爆的气球数和对方本轮戳爆气球数之和为4;②保证对方第一次戳球后剩下球数x不满足x≡0(mod 4)
若能满足条件①和②,则此游戏一定取胜。否则,必须采取方案二,尝试使对方每次戳球前总球数满足x≡0(mod 6)。若方案二也不能满足,则此游戏必败。
而你会发现,条件②实际上就相当于总球数n≡0(mod 4)。因此,当总球数n能被4整除时,应该采用方案①;同理,当总球数n能被6整除时,应该采用方案②。得到结论:当总球数n为4或6的倍数时,这个游戏可以取胜;否则,必定失败。
展开全部
在规则①下:
如果n是4的倍数,你必胜,每次蓝神戳x个气球,你就戳4-x个气球,这样就能保证最后一个戳气球的是你。
如果n不是4的倍数,蓝神赢,因为蓝神可以首先戳掉一些气球使气球总数变为4的倍数,然后你戳x个气球蓝神就戳4-x个气球,这样蓝神就能保证最后一个戳气球的是自己。
在规则②下:
如果n是6的倍数,你胜;否则蓝神胜。理由同上。
因此我们可以看到如果n是4的倍数或6的倍数,你可以通过选择规则来确保自己获胜;如果n既不是4的倍数也不是6的倍数,无论你怎样选择规则都是蓝神胜。你的程序唯一要做的就是判断n是不是4的倍数,是不是6的倍数。
如果n是4的倍数,你必胜,每次蓝神戳x个气球,你就戳4-x个气球,这样就能保证最后一个戳气球的是你。
如果n不是4的倍数,蓝神赢,因为蓝神可以首先戳掉一些气球使气球总数变为4的倍数,然后你戳x个气球蓝神就戳4-x个气球,这样蓝神就能保证最后一个戳气球的是自己。
在规则②下:
如果n是6的倍数,你胜;否则蓝神胜。理由同上。
因此我们可以看到如果n是4的倍数或6的倍数,你可以通过选择规则来确保自己获胜;如果n既不是4的倍数也不是6的倍数,无论你怎样选择规则都是蓝神胜。你的程序唯一要做的就是判断n是不是4的倍数,是不是6的倍数。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询