背景
原神是由米哈游开发的一款二次元游戏,其中抽卡是其核心玩法之一。关于原神的抽卡概率与保底机制,网上已经有大量的详细解析了。那么到底从长期来看,每次抽到五星角色时,该五星角色恰好为当期UP的概率为多少呢?
大小保底机制详解
原神的大小保底机制如下。若之前从未抽到过五星角色,则抽到的五星角色有50%的概率为当期UP五星角色,50%的概率为非当期UP五星角色。若上次抽到了非当期UP五星角色,则本次抽到五星角色时必为当期UP五星角色,这种情况我们称之为大保底。若上次抽到了当期UP五星角色,则本次抽到五星角色时按之前从未抽到过五星角色对待。
代码及运行结果
C语言代码如下。
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
int main() {
int i =0,j=0,up=0,down=0;
int tmp=0;//0表示第一次抽或上次触发了大保底,1表示上次触发了小保底
srand(time(NULL));
for(i=0;i<10000;i++){//抽一万次
j = rand() % 2;
if(tmp==0){
if(j==0)up++;//j=0表示抽中了当期UP角色触发了大保底
else if(j==1){down++;tmp=1;} //j=1 歪了
else printf("warning!") ;
}
else if (tmp==1) {
up++;
tmp=0;
}
else printf("warning!") ;
}
printf("运行一万次,共抽中当期UP%d次,概率为%.2f,非当期UP%d次,概率为%.2f\n",up,up/10000.0,down,down/10000.0);
return 0;
}
python代码如下
import random
i,j,up,down=0,0,0,0;
tmp=0;#0表示第一次抽或上次触发了大保底,1表示上次触发了小保底
for i in range(10000): #抽一万次
j = random.randint(0,1)
if(tmp==0):
if(j==0):
up+=1 #j=0表示抽中了当期UP角色触发了大保底
elif(j==1):
down+=1
tmp=1; #j=1 歪了
else:
printf("warning!") ;
elif (tmp==1):
up+=1;
tmp=0;
else:
printf("warning!") ;
print("运行一万次,共抽中当期UP%d次,概率为%.2f,非当期UP%d次,概率为%.2f\n"%(up,up/10000.0,down,down/10000.0));
结果如下:
C:运行一万次,共抽中当期UP6672次,概率为0.67,非当期UP3328次,概率为0.33
python:运行一万次,共抽中当期UP6673次,概率为0.67,非当期UP3327次,概率为0.33
结论
仅从每次来看,歪的概率是0.5,但是有了大小保底机制,歪的概率降低到了0.33,这是在是非常人性化的设计,氪金吧!