游戏当中的秘密
因为我昨天玩游戏被骗,所以特此记录。(在飞机上算的,笑)
概率的游戏
假设现在有红、黄、蓝
你抽到的组合 | 你获得的钱数 |
---|---|
543 | -30 |
444 | 5 |
642 | 5 |
552 | 15 |
633 | 20 |
651 | 50 |
732 | 80 |
741 | 100 |
750 | 150 |
831 | 300 |
660 | 800 |
822 | 2000 |
840 | 5000 |
其中
如果算一下概率,即
那么,概率如下表:
你抽到的组合 | 你抽到这个组合的概率( |
---|---|
444 | 12.68418 |
543 | 48.70725 |
552 | 9.74145 |
633 | 9.74145 |
642 | 12.17681 |
651 | 2.78327 |
660 | 0.08698 |
732 | 2.78327 |
741 | 0.99403 |
750 | 0.09940 |
822 | 0.08698 |
831 | 0.09940 |
840 | 0.01553 |
如果计算
生成程序
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 60;
ll C[N][N];
void init(){
C[0][0]=1;
for (int i=1; i<N; i++){
C[i][0]=1;
for (int j=1; j<=i; j++){
C[i][j]=C[i-1][j-1]+C[i-1][j];
}
}
}
ll cal(int a,int b,int c){
set<int> st;
st.insert(a),st.insert(b),st.insert(c);
int sz=st.size();
if (sz==1)return 1;
if (sz==2)return 3;
if (sz==3)return 6;
}
struct node {
int a,b,c;
long double pr;
node (int _a,int _b,int _c,long double _p){
a=_a,b=_b,c=_c,pr=_p;
}
bool operator < (const node &x) const {
return pr>x.pr;
}
};
const double mon[] = {-30,5,5,15,20,50,80,100,150,300,800,2000,5000};
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
init();
ll al=C[24][12];
long double sum=0;
vector<node> v;
for (int a=0; a<=8; a++){
for (int b=0; b<=8; b++){
for (int c=0; c<=8; c++){
if (a+b+c==12 && a>=b && b>=c){
ll p=cal(a,b,c)*C[8][a]*C[8][b]*C[8][c];
long double pr=1.*(long double)p/(1.*(long double)al);
sum+=pr;
v.push_back(node(a,b,c,pr));
}
}
}
}
sort(v.begin(),v.end());
int _=5;
long double pr_mon=0;
while (_--){
int id=0;
for (auto u : v){
pr_mon+=u.pr*mon[id];
id++;
}
}
cout<<pr_mon<<endl;
return 0;
}
无赖的游戏
这里是抽大奖环节!有一个格纸,每一个格子里面都有一个对应的奖品。有
游戏规则如下:
看出来了吧。
那你会想,小奖也是有大小的,怎么分配大小呢?你算了一下概率。
你投出来的和 | 投这个和的概率( |
---|---|
5 | 0.01286 |
6 | 0.06430 |
7 | 0.19290 |
8 | 0.45010 |
9 | 0.90021 |
10 | 1.62037 |
11 | 2.63632 |
12 | 3.92233 |
13 | 5.40123 |
14 | 6.94444 |
15 | 8.37191 |
16 | 9.45216 |
17 | 10.03086 |
18 | 10.03086 |
19 | 9.45216 |
20 | 8.37191 |
21 | 6.94444 |
22 | 5.40123 |
23 | 3.92233 |
24 | 2.63632 |
25 | 1.62037 |
26 | 0.90021 |
27 | 0.45010 |
28 | 0.19290 |
29 | 0.06430 |
30 | 0.01286 |
看出来了,是中间高两边低的。像我就是抽到了
生成程序
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 33;
int cnt[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int sum=0;
for (int a=1; a<=6; a++)
for (int b=1; b<=6; b++)
for (int c=1; c<=6; c++)
for (int d=1; d<=6; d++)
for (int e=1; e<=6; e++){
sum++;
cnt[a+b+c+d+e]++;
}
for (int i=5; i<=30; i++){
long double pr=(long double)(1.*cnt[i])/(long double)(1.*sum);
cout<<"| "<<i<<" | "<<fixed<<setprecision(5)<<pr*100.<<" |"<<endl;
}
return 0;
}
结语
大家玩游戏就图个乐子,不要抱什么希望!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
2023-02-06 网络流学习笔记