欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

[CH Round #61] 取数游戏

发布时间:2025/3/15 编程问答 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 [CH Round #61] 取数游戏 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

描述

SJY和CYF在玩一个取数游戏。他们将1~n分别写在n张纸上,随机排成一排,约定SJY先取,只能取走最边上的两张纸之一,然后CYF取;以此循环下去,取到1的人获胜。假设SJY和CYF足够聪明,求SJY获胜的概率。

输入

一个整数n

输出

SJY获胜的概率,保留最简分数形式(若为1,则输出1/1;若为0,则输出0/1)。
样例

样例输入1
2
样例输出1
1/1

样例输入2
3
样例输出2
2/3

数据范围与约定

40%的数据,0<n≤7。
70%的数据,0<n≤1000。
100%的数据,0<n≤1000000000。
样例2说明

共有1、2、3;1、3、2;2、1、3;2、3、1;3、1、2;3、2、1六种可能,其中第1、2、4、6种可能SJY获胜。

题解:

数学分析可以得出:n为1,必胜。否则,n为奇数,只有当头尾为1时先取必胜;n为偶数任何情况必胜。

分析过程:
先考虑一种很特殊的情况:2 1 3。此时显然先取是必败的。
那么当n为奇数且不为1且1不在头尾时,1的位置无论从前向后还是从后向前都是同在奇数或偶数位,那么无论先取一方取哪端,另一方取后都维持了这个性质。只要另一方足够聪明,他一定能使让最后形成 a 1 b 的局面。所以先取必败。
则当n为偶数,先取一方必然可以在取后让剩余的n为奇数,那么后取方就相当于n为奇数时的先取方,是必败的。

总结一下:
n为1或n为偶数,必胜 1/1;
n为奇数(不为1),共n!种排列方式,其中1放在头部的有(n-1)!种,放在尾部相同,胜利的概率为 (n-1)!* 2 / n!= 2/n。

代码:

#include<cstdio> using namespace std;int main() {int n, x, y;scanf("%d", &n);if(n == 1 || n % 2 == 0) printf("1/1\n");else printf("2/%d\n", n);return 0; }

总结

以上是生活随笔为你收集整理的[CH Round #61] 取数游戏的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。