一些好玩的经典游戏的数据
如果图片/链接炸掉,你可能要用和进入洛谷国际站相同的方法
本文大多数数字都要在前面加“约”。
石头剪刀布
规则
这是一个全球通用规则统一的双人零和博弈游戏。
有三个手势:石头(手捏券)、剪刀(食指和中指伸出)、布(手摊开),两个人各选一个手势
- 石头胜剪刀
- 剪刀胜布
- 布胜石头
如何玩这个游戏
先放统计
图片备用链接:https://cdn.luogu.com.cn/upload/image_hosting/yyh65pny.png
来源:[OC] Percentage of Americans who chose Rock, Paper or Scissors for each of the three rounds in the game.
可以看到,所有轮出石头的人都是最多的,第一轮占据了一半多!所以
- 如果对面是陌生人,第一轮出布的胜率是最高的,只有
26\% 的概率输。 - 如果你认为对面知道这个东西且遇事只算期望的话就出石头
- 如果你觉得对面绝顶聪明:那就随便出吧,反正猜疑链下去都差不多
下几轮就太复杂了,不讨论。
生日悖论
介绍
只要有 23 个人,就有超过 50% 的概率至少有两个人同一天生日!
数据
您是 OIer,验证的话自己写一个期望 DP 算就行,就不放来源了。
| 人数 n | 至少两人同一天生日的概率 |
|---|---|
公式:
广义生日悖论
| 碰撞概率 |
需要多少人 |
|---|---|
| 一年 |
|
| 任意哈希值( |
约 |
这启示我们写双哈希。
猜数字
这个游戏并不出名,让我们先玩一遍这个游戏
规则
一个
像
现在你想一个合法的数字。 ::::info[您心中的数字是(成功概率很低)]
::::
解释
::::info[猜完再看]
这个游戏只有
根据规则,可行的数只有:
20 24 26 28 40 42 46 48
这
像
19,36 就不行。
这其实是暗示你往 因为我也不会这是高深的心理学)
现在只剩下
数据:似乎没有,这个游戏是我在某本忘了的书上看到的,但和小学同学玩下来很对。
随机数字 1
规则
参加游戏首先需要上缴
您首先选一个数字,然后在
显然的,这样无论怎么选择,最后期望都是
随机数字 2
规则
参加游戏首先需要上缴
然后在
分析
这个游戏是赚的,纯数学证明比较困难,下面给出模拟的代码: ::::info[code with Github Copilot]
#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;
}
::::
通过模拟
下面是表格:
我也不知道为啥看起来比较神金。 ::::info[AI 使用声明] 这部分表格的绘制和模拟代码都有 AI 辅助(图片:GPT-5.1),已经审查内容保证无误。 ::::
随机数字 3
规则
参加游戏首先需要上缴
您首先选一个数字,然后请一万名
分析
这个游戏看起来和第一个问题一样玩了个寂寞,但是您可以选择心理热门数字,下面放一个统计
来源:Pick a number from 1-100: results from 6750 responses across various social media platforms [OC]
表格: https://docs.google.com/spreadsheets/d/1hG_25DCI2fMz210fCt84q-sVth3CNRBAT1OlT7zvKBk/edit?gid=1798635135#gid=1798635135
可以看到