专栏文章
一些好玩的经典游戏的数据
算法·理论参与者 43已保存评论 51
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 50 条
- 当前快照
- 1 份
- 快照标识符
- @miijahmn
- 此快照首次捕获于
- 2025/11/28 15:21 3 个月前
- 此快照最后确认于
- 2025/12/08 01:08 2 个月前
如果图片/链接炸掉,你可能要用和进入洛谷国际站相同的方法
本文大多数数字都要在前面加“约”。
石头剪刀布
规则
这是一个全球通用规则统一的双人零和博弈游戏。
有三个手势:石头(手捏券)、剪刀(食指和中指伸出)、布(手摊开),两个人各选一个手势
- 石头胜剪刀
- 剪刀胜布
- 布胜石头
如何玩这个游戏
先放统计

图片备用链接:https://cdn.luogu.com.cn/upload/image_hosting/yyh65pny.png
可以看到,所有轮出石头的人都是最多的,第一轮占据了一半多!所以
- 如果对面是陌生人,第一轮出布的胜率是最高的,只有 的概率输。
- 如果你认为对面知道这个东西且遇事只算期望的话就出石头
- 如果你觉得对面绝顶聪明:那就随便出吧,反正猜疑链下去都差不多
下几轮就太复杂了,不讨论。
生日悖论
介绍
只要有 23 个人,就有超过 50% 的概率至少有两个人同一天生日!
数据
您是 OIer,验证的话自己写一个期望 DP 算就行,就不放来源了。
| 人数 n | 至少两人同一天生日的概率 |
|---|---|
公式:
广义生日悖论
| 碰撞概率 | 需要多少人 |
|---|---|
| 一年 天 | 人 |
| 的数字 | 人 |
| 的数字 | 人 |
| 任意哈希值() | 约 人 |
这启示我们写双哈希。
猜数字
这个游戏并不出名,让我们先玩一遍这个游戏
规则
一个 的数字合法的要求这个数字十位和个位上的数都是偶数,且不能相同。
像 就不行。
现在你想一个合法的数字。
您心中的数字是(成功概率很低)
解释
猜完再看
这个游戏只有 的成功。
根据规则,可行的数只有:
CPP20 24 26 28 40 42 46 48
这 个。然后在后面说了
像 就不行。
这其实是暗示你往 的数字想(不要问为什么,因为我也不会这是高深的心理学)
现在只剩下 了, 的概率最大。
数据:似乎没有,这个游戏是我在某本忘了的书上看到的,但和小学同学玩下来很对。
随机数字 1
规则
参加游戏首先需要上缴 。
您首先选一个数字,然后在 中均匀随机选整数 次,统计这些数中和您选的相同的数字次数 ,您获得 。
显然的,这样无论怎么选择,最后期望都是 。
随机数字 2
规则
参加游戏首先需要上缴 。
然后在 中均匀随机选整数 次,您在知道这些数据之后选择一个数,统计这些数中和您选的相同的数字次数 ,您获得 。
分析
这个游戏是赚的,纯数学证明比较困难,下面给出模拟的代码:
code with Github Copilot
CPP#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
const int trials = 10000; // 模拟次数,可自行调大
const int draws = 10000; // 每次抽样次数
const int range = 100; // 数字范围 1~100
const int cost = 120; // 入场费
mt19937 rng(random_device{}());
uniform_int_distribution<int> dist(0, range - 1);
long long sum_max_cnt = 0;
long long sum_profit = 0;
int not_lose = 0;
int win = 0;
vector<int> cnt(range);
for (int t = 0; t < trials; ++t) {
fill(cnt.begin(), cnt.end(), 0);
for (int i = 0; i < draws; ++i) {
int x = dist(rng);
cnt[x]++;
}
int mx = *max_element(cnt.begin(), cnt.end());
sum_max_cnt += mx;
int profit = mx - cost;
sum_profit += profit;
if (mx >= cost) not_lose++;
if (mx > cost) win++;
}
cout << fixed << setprecision(6);
cout << "Trials = " << trials << "\n";
cout << "Expected max count = "
<< (double)sum_max_cnt / trials << "\n";
cout << "Expected net profit = "
<< (double)sum_profit / trials << "\n";
cout << "P(not losing) = "
<< (double)not_lose / trials * 100 << "%\n";
cout << "P(win) = "
<< (double)win / trials * 100 << "%\n";
return 0;
}
通过模拟 次,得到赚的概率约为 ,亏的概率约为 ,期望是 ,标准差 。
下面是表格:

我也不知道为啥看起来比较神金。
AI 使用声明
这部分表格的绘制和模拟代码都有 AI 辅助(图片:GPT-5.1),已经审查内容保证无误。
随机数字 3
规则
参加游戏首先需要上缴 。
您首先选一个数字,然后请一万名志愿者选择 的数字。统计这些数中和您选的相同的数字次数 ,您获得 。
分析
这个游戏看起来和第一个问题一样玩了个寂寞,但是您可以选择心理热门数字,下面放一个统计

表格: https://docs.google.com/spreadsheets/d/1hG_25DCI2fMz210fCt84q-sVth3CNRBAT1OlT7zvKBk/edit?gid=1798635135#gid=1798635135
可以看到 这个数字在 人随机选择下出现了 次!出现概率约 如果选择类似数字,是赚的。
相关推荐
评论
共 51 条评论,欢迎与作者交流。
正在加载评论...