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()