1.黑箱中有10种不同颜色的乌龟,保证他们个数始终足够且相等。乌龟将由参与者抽出并填入编号为1-9的九宫格中,且优先填入数字小的格子。参与者开局拥有n次抽取的机会。
2.参与者开局自己确定一个幸运颜色,抽中幸运颜色即可再抽一次
3.当网格中一行或一列出现三只颜色相同的乌龟,这三只将被移出网格,参与者可再抽五次
4.当网格中任意两个格子出现颜色相同的乌龟,这两只将被移出网格,参与者可再抽一次(三只同色判断优先级大于两只同色)
5.当网格中没有可移出的乌龟且参与者没有抽取次数时,游戏结束,所有离开黑箱的乌龟归参与者所有
#include<bits/stdc++.h>
using namespace std;
unsigned zseed=time(0);
mt19937_64 zgen{zseed};
struct UI
{
uniform_int_distribution<int> u;
mt19937_64& gen{zgen};
int get()
{
return u(gen);
}
UI(int a=1,int b=10)
: u{a,b}{}
};
int p[10];//将九宫格编号为1-9可以化为一维
int s,load;//load为待抽的,s为已抽的
int check3()//判断三连
{
int sum=0;
if(p[1]==p[2]==p[3]&&p[1]!=0)
{
p[1]=p[2]=p[3]=0;
sum++;
}
if(p[4]==p[5]==p[6]&&p[4]!=0)
{
p[4]=p[5]=p[6]=0;
sum++;
}
if(p[7]==p[8]==p[9]&&p[7]!=0)
{
p[7]=p[8]=p[9]=0;
sum++;
}
if(p[1]==p[4]==p[7]&&p[1]!=0)
{
p[1]=p[4]=p[7]=0;
sum++;
}
if(p[2]==p[5]==p[8]&&p[2]!=0)
{
p[2]=p[5]=p[8]=0;
sum++;
}
if(p[3]==p[6]==p[9]&&p[3]!=0)
{
p[3]=p[6]=p[9]=0;
sum++;
}
if(p[1]==p[5]==p[9]&&p[1]!=0)
{
p[1]=p[5]=p[9]=0;
sum++;
}
if(p[3]==p[5]==p[7]&&p[3]!=0)
{
p[3]=p[5]=p[7]=0;
sum++;
}
return sum;
}
int check2()//判断对对碰
{
int sum=0;
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
{
if(p[i]==p[j]&&p[i]!=0)
{
sum++;
p[i]=p[j]=0;
}
}
return sum;
}
int main()
{
freopen("data.txt","w",stdout);
UI u{1,10};
int i=100000;//模拟十万次
while(i--)
{
int luck=u.get();//u.get()产生[1,10]中的随机整数
int j=1;
load=18;s=0;//开局有18次抽取机会
while(1)
{
j=1;
while(p[j]!=0)j++;
while(j!=9)
{
if(p[j]==0)
{
if(load>0)
{
p[j]=u.get();
if(p[j]==luck)load++;
j++;load--;s++;
}
}
else j++;
if(load==0)break;
}
if(check3()!=0)load+=5*check3();
if(check2()!=0)load+=check2();
if(load==0&&check2()==0&&check3()==0)break;
else
{
if(check3()!=0)load+=5*check3();
if(check2()!=0)load+=check2();
}
}
for(int k=1;k<=9;k++)
if(p[k]!=0)s++;
printf("%d ",s);
memset(p,0,sizeof(p));
}
}
from collections import Counter #c++产生数据,python统计个数出现频率并绘制图像
import matplotlib.pyplot as plt
# 读取数据文件并初始化Counter对象
with open('data.txt', 'r') as file:
lines = file.readlines()
# 将所有行的数字合并到一个列表中,并转换为整数
all_numbers = [int(num) for line in lines for num in line.split()]
# 使用Counter统计频次
freq_counter = Counter(all_numbers)
# 计算总的数字数量和均值
total_numbers = sum(freq_counter.values())
mean_value = sum(all_numbers) / total_numbers
# 打印每个数字及其频率和均值
for number, frequency in freq_counter.items():
frequency_percentage = (frequency / total_numbers) * 100
print(f"Number {number} appears with a frequency of {frequency_percentage:.2f}%")
print(f"The mean value is: {mean_value:.2f}")
# 使用matplotlib绘制条形图
plt.figure(figsize=(10, 8)) # 可以调整图形大小
# 绘制条形图
bars = plt.bar(freq_counter.keys(), [(freq / total_numbers) * 100 for freq in freq_counter.values()], color='blue')
# 在图表旁边添加均值文本
plt.text(0.02, 0.95, f'Mean Value: {mean_value:.2f}',
transform=plt.gca().transAxes, # 将文本放在轴的坐标系中
fontsize=12, color='green',
bbox=dict(facecolor='white', alpha=0.5, boxstyle='round'))
# 设置X轴和Y轴的标签
plt.xlabel('Number')
plt.ylabel('Frequency (%)')
# 设置图表标题
plt.title('Frequency Distribution of Numbers')
# 显示图表
plt.show()