首页 > 其他分享 >探究乌龟对对碰游戏的最优策略

探究乌龟对对碰游戏的最优策略

时间:2024-08-16 15:50:19浏览次数:10  
标签:load plt 对对碰 int sum ++ 探究 && 乌龟

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

标签:load,plt,对对碰,int,sum,++,探究,&&,乌龟
From: https://www.cnblogs.com/ZxjBlogs/p/18362929

相关文章

  • 解决“往日不再”DX11错误的全面指南:探究原因与提供实用解决方案
    《往日不再》(DaysGone)是一款由BendStudio开发、SonyInteractiveEntertainment发行的末世生存动作冒险游戏。该游戏最初为PlayStation4平台独占,后移植到PC平台,让更多的玩家能够体验其扣人心弦的故事和紧张刺激的游戏玩法。然而,在PC平台上运行时,部分玩家可能会遇到DirectX1......
  • 【动画进阶】神奇的卡片 Hover 效果与 Blur 的特性探究
    本文,我们将一起探讨探讨,如下所示的一个卡片Hover动画,应该如何实现:这个效果的几个难点:鼠标移动的过程中,展示当前卡片边缘的border以及发光效果;效果只出现在鼠标附近?这一块的实现方法就有很多种了,可以计算鼠标附近的范围,在范围内去实现的效果,但是这样成本太高了。转换一......
  • Java Reentrantlock可重入锁原理 | 源码探究
    一、基本概念ReentrantLock是Java中提供的一个可重入互斥锁,它是java.util.concurrent.locks包中的一个接口Lock的实现类。ReentrantLock提供了比使用synchronized关键字更强大的锁定机制,例如 公平锁 和 非公平锁 选择、尝试锁定、可中断锁定等。ReentrantLock......
  • 透过vivo的鞋子和亚马逊的椅子:探究新商业文明
    有一种领先,叫微微领先。 在亚马逊的会议室中,有一把永远为用户准备的椅子;在vivo,则要求不能只坐在会议室看PPT上的用户需求,而是要穿着用户的鞋子在企业奔跑。殊途同归,将“以用户导向”作为企业长期发展的基石,亚马逊和vivo真正将“让用户Happy”通过道、法、术落到了实处,这样的......
  • UITableView的原理——探究及重新实现代码
    转自简书,原文地址,本文主要探讨一些特殊细节,像视图重用这类最基本的原理可在源码里查看。先前重新实现了一个list容器视图,由于Apple没有开源,在此分享过程中探索到的UITableView一些细节。MPTableView:AlistviewlikeUITableView,morefast,morefeatures.1·捉摸不定的con......
  • 探究全局代理是什么?有什么作用?
    今天,我们来聊聊一个经常被提及但很多人不太了解的概念——全局代理。那么,全局代理到底是什么?它有什么用?以及如何正确使用呢?接下来,小编就带大家一探究竟!什么是全局代理?通俗地说,全局代理是一种网络设置方式,通过代理服务器转发所有的网络流量。无论你访问哪个网站,所有的请求都......
  • WiFiAp探究实录--功能实现与源码分析
    wifi热点说的是wifiAp相关,所以如果源码开发的话,这个WifiAp算是一个搜索代码的关键字,含义是WifiAccesspoint,wifi接入点。所以下文中的wifi热点统一用WifiAp代替wifiAp打开方式:设置->更多->移动网络共享->便携式wlan热点。wifiAp打开条件:任何情况下均可。只是有内网外网之分......
  • 探究spring中如何如何从ioc中拿到对象,ioc中都存了什么
    引言ApplicationContextioc=newClassPathXmlApplicationContext("beans.xml");Monstermonster01=(Monster)ioc.getBean("monster01");这是我们接触spring时接触的第一行代码,我们只是习惯性的通过ioc.getBean获取我们需要的对象,但是你有没有想过在这个a......
  • 深入探究 Vue.js 高级技术:从响应式系统到高效组件设计的实战指南
    这里有一些实用的Vue.js高级示例,涵盖了前面提到的高级知识点,适合在实际项目中应用:1.自定义响应式数据使用Vue3的customRefAPI创建一个自定义的响应式输入框,带有防抖功能。import{customRef}from'vue';functionuseDebouncedRef(value,delay=300){......
  • c语言自学第二十天----深入探究指针下(补前面的)
    一.二级指针C++中的指针是一个非常重要的概念,而二级指针是指向指针的指针。什么是指针?指针是一个变量,用来存储内存地址。它可以指向其他变量或对象,并通过解引用操作符"*"来访问所指向的值。什么是二级指针?二级指针是指向指针的指针,它存储的是指针的地址。通过二级指......