办公室中打水故事

简介: 交代下故事背景,办公室中有个电热水壶,办公室内的人员公用。其中还有个潜规则,就是若谁在接水是发现电热水壶中没有水(就是自己的杯子没有接满),他/她就负责给电热水壶注满水。 故事是,一段时间,本人喝水不多,但连续多次去接水喝,都是没有接满杯子就没水了。本人开始吐槽自己的运气和人品,但小师弟就说这事因为我的杯子原因。为此,我们争论了好几次。个人语言表达能力有限,知道这是个常识性问题,还是未能

交代下故事背景,办公室中有个电热水壶,办公室内的人员公用。其中还有个潜规则,就是若谁在接水是发现电热水壶中没有水(就是自己的杯子没有接满),他/她就负责给电热水壶注满水。

故事是,一段时间,本人喝水不多,但连续多次去接水喝,都是没有接满杯子就没水了。本人开始吐槽自己的运气和人品,但小师弟就说这事因为我的杯子原因。为此,我们争论了好几次。个人语言表达能力有限,知道这是个常识性问题,还是未能说服他。


昨夜在床上看书,突发奇想,用事实说服吧。既然是学计算机的,那就把情况模拟一下好了。


算法:

初始化人员各种参数(杯子大小,打水概率)

产生打水序列

依据水壶大小,进行切割(就是确定打水人员)

对切割结果进行统计

打印

java实现如下

public class Test {
	
	private int[] container;
	private int length;
	private int members[] = {3,4,5,6};
	private static int sum[] = new int[4];
	
	public Test(int c, int l){
		container = new int[c];
		length = l;
	}


	public static void main(String[] args){
		Test t = new Test(10000000, 60);
		t.init();
		t.statistics();
		t.print();
	}
	
	private void print() {
		for(int s: sum){
			System.out.println(s);
		}
	}

	private void statistics() {
		for(int index=0; index*length < container.length; index++){
			sum[container[index*length]]++;
		}
	}


	public void init(){
		int index = 0;
		while(index < container.length){
			int member = getMember();
			int size = members[member];
			if(index + size < container.length){
				for(int i=0; i < size; i++){
					container[index + i] = member;
				}
				index += size;
			}else{
				for(; index < container.length; index++){
					container[index] = member;
				}
			}
		}
	}

	private int getMember() {
		int x = new Double(57*Math.random()).intValue();
		if(x < 20){
			return 0;
		} else if( x < 35){
			return 1;
		}else if( x < 47){
			return 2;
		}else{
			return 3;
		}
	}
}

其中原始设置如下:

四个人,杯子大小一次容量为3,4,5,6


java类可以直接调节电热水壶的容量,和实验次数


其中,如果试验次数较少,会影响结果


最后给出上述代码运行一次的结果:

41590
41842
41553
41682

(注意:由于其中运用了随机函数,两次的运行结果一般不会一样,但大的差距不会很大。哦,很大概率上,你可以近似理解为永不)


含义为:

杯子容量为3的人给壶注入水的次数为:41590

杯子容量为4的人给壶注入水的次数为:41842

杯子容量为5的人给壶注入水的次数为:41553

杯子容量为6的人给壶注入水的次数为:41682


上述结果我们可以说明,给壶接水的次数或则概率与接水人杯子的大小无关

相关文章
|
Linux 调度 C语言
嵌入式系统编程
嵌入式系统编程
170 2
|
机器学习/深度学习 算法
大模型开发:解释随机森林算法以及它是如何做出决策的。
随机森林是集成学习方法,利用多棵决策树提升性能。通过随机抽样和特征选择创建弱分类器,减少模型相关性。每个决策树基于子数据集和特征子集构建,预测时集成所有决策树结果,分类问题采用投票,回归问题取平均值。这种方法降低过拟合风险,提高准确性和稳定性,对噪声和异常值容忍度高,广泛应用。
267 0
|
JavaScript 开发者
Vue状态管理: 在Vuex中,什么是mutation?它们应该如何使用?
Vue状态管理: 在Vuex中,什么是mutation?它们应该如何使用?
425 4
|
8月前
|
数据采集 JSON 测试技术
如何在Python中高效实现CSV到JSON的数据转换
在实际项目中,数据格式转换是常见问题,尤其从CSV到JSON的转换。本文深入探讨了多种转换方法,涵盖Python基础实现、数据预处理、错误处理、性能优化及调试验证技巧。通过分块处理、并行处理等手段提升大文件转换效率,并介绍如何封装为命令行工具或Web API,实现自动化批量处理。关键点包括基础实现、数据清洗、异常捕获、性能优化和单元测试,确保转换流程稳定高效。
382 83
|
11月前
|
机器学习/深度学习 存储
深入理解SVM中的核函数及其应用
深入理解SVM中的核函数及其应用
431 83
|
JavaScript 开发工具
vite如何打包vue3插件为JSSDK
【9月更文挑战第10天】以下是使用 Vite 打包 Vue 3 插件为 JS SDK 的步骤:首先通过 `npm init vite-plugin-sdk --template vue` 创建 Vue 3 项目并进入项目目录 `cd vite-plugin-sdk`。接着,在 `src` 目录下创建插件文件(如 `myPlugin.js`),并在 `main.js` 中引入和使用该插件。然后,修改 `vite.config.js` 文件以配置打包选项。最后,运行 `npm run build` 进行打包,生成的 `my-plugin-sdk.js` 即为 JS SDK,可在其他项目中引入使用。
562 6
|
12月前
|
人工智能 人机交互 智能硬件
从大模型的原理到提示词优化
本文介绍了大语言模型(LLM)的基本概念及其工作原理,重点探讨了AI提示词(Prompt)的重要性和几种有效技巧,包括角色设定、One-shot/Few-shot、任务拆解和思维链。通过实例解析,展示了如何利用这些技巧提升LLM的输出质量和准确性,强调了提供高质量上下文信息对优化LLM表现的关键作用。
833 0
|
存储 安全 编译器
指针的深入理解与陷阱
指针的深入理解与陷阱
|
数据可视化 Python
利用Matplotlib绘制数据可视化图表
**摘要:** 本文介绍了Python的绘图库Matplotlib在数据分析和科学计算中的重要性。Matplotlib是一个开源库,提供类似MATLAB的接口,支持静态、动态和交互式图表的绘制,并能保存为多种格式。文章详细讲解了Matplotlib的基本用法,包括安装库、导入模块和绘制简单折线图的步骤。还展示了如何绘制柱状图并添加数据标签。通过这些例子,读者可以了解如何利用Matplotlib进行数据可视化,并对其进行自定义以满足特定需求。
204 4
|
搜索推荐 JavaScript Java
基于SpringBoot+Vue+uniapp的个性化美食推荐系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的个性化美食推荐系统的详细设计和实现(源码+lw+部署文档+讲解等)
371 1