【java】高尔顿瓶
豆机
首先对每个豆子单独分析一下,若有8个槽,则每个豆子需面临7次路径的选择:左或者右,两种状态(暂用0和1态表示)。总的来说,直到一个豆子掉入槽中,它选择的路径组合有2^7种。这就产生了一个如何产生随机状态(0或1)的实现问题。
这样如有5个豆子,则重复5次循环,每个豆子在掉入板子口之前没有个体差异。
现在就来确定一下抽象这个问题的标准吧:
0指的是向左偏移一次,1指的是向右偏移一次。这样,我们就可以给槽标号区分了,如有8个槽,从左到右的编号依次是0,1,2,3,4,5,6,7。在输出显示每个豆子的路径选择时,此处需要一个0转为L显示、1转为R显示的方法。
所有的槽作为一个一维数组,下标是槽的编号,每个元素的内容存放的即是槽里最终掉入的豆子的个数(初始为0)。在单独模拟每个豆子的掉落时,同时就要计数器来记录豆子掉入了哪个槽。
至此,思路大致清晰,该考虑细节以及该设计什么方法来实现了。
1.获取用户输入,两个参数,豆子的个数(n)和槽的个数(MAXN)。
2.每个豆子路径选择的单独情况:两个部分,产生随机状态,并实时打印;一个细节是,如何将表示状态的数“0”、“1”在打印时转化成“L”和“R”。经过(MAXN-1)次选择,豆子的最终状态(每次选择的状态直接做代数相加)即对应槽的编号,这里同时也需要建立一个最终状态和槽编号的联系。
3.最后要打印槽中的豆子的分布情况,打印一个nxMAXN的矩阵(没有豆子的那行可以不显示)。
最后,主方法大致是:获取用户输入,然后写一个n次的循环,在循环中调用上面的方法。
运行效果(局部):
这题的思路其实比较简单,但我写的很乱。。。
代码如下:
import java.util.Scanner;public class BallsDrop {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.print("Enter the number of balls to drop:");int n = input.nextInt();System.out.print("Enter the number of slots in the machine:");int MAXN = input.nextInt();beanMachine(n, MAXN);}public static String getStateName(int state) {String stateName = "";switch(state) {case 0: stateName = "L"; break;case 1: stateName = "R";}return stateName;}public static int choseYourWay(int MAXN) {int state_final = 0;for(int i = 0; i < MAXN - 1; i++) {int state_now = (int)(Math.random() * 2);System.out.printf("%s", getStateName(state_now));state_final += state_now;}System.out.printf("\n");return state_final;}public static void beanMachine(int n, int MAXN) {int[] slots = new int[MAXN];for(int i = 0; i < MAXN; i++)slots[i] = 0;System.out.printf("\n");for(int i = 0; i < n; i++) {slots[choseYourWay(MAXN)]++;}int[][] beanMachine = new int[n][MAXN];for(int i = n - 1; i >= 0; i--) {for(int j = 0; j < MAXN; j++) {if(slots[j] != 0) {beanMachine[i][j] = 1;slots[j]--;}elsebeanMachine[i][j] = 0;}}int start = 0;for(int i = 0; i < n; i++) {int judge = 0;for(int j = 0; j < MAXN; j++) {if(beanMachine[i][j] == 1)judge = 1;}if(judge == 0)start++;}System.out.printf("\n");for(int i = start; i < n; i++) {for(int j = 0; j < MAXN; j++) {String bean = beanMachine[i][j] == 1 ? "0" : " ";System.out.printf("%3s", bean);}System.out.printf("\n");}}
}
【java】高尔顿瓶相关推荐
- ***6.21-豆机 梅花瓶 高尔顿瓶
问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:Slots.java *作 者:单昕昕 *完成日期:20 ...
- 模拟豆机、高尔顿瓶【java】
package text1_3; //产生随机数0与1表示球的路径,最后狭槽中的小球数量可以用一个数组记录并且步数等于狭槽数-1:小球最终进入哪个槽中与向右的数量有关,并且是相等的 import ja ...
- java空瓶换饮料的程序实现
package com.JavaApi.file;/*** 需求:一瓶饮料价格 1 元,两个空瓶可以换一瓶,三个盖子也能换一瓶,* 问:不赊账,用 20 元最多能买几瓶?**/public class ...
- Java一瓶可乐_Java实现可乐瓶问题
题目:一瓶可乐要1元钱,2个空瓶可以换1瓶,现在你有20元,问--你最多可以喝到几瓶可乐? 注:欢迎留言交流! package set; /* * 逻辑问题: * ---------- * 1元可以买 ...
- 实验五_简单游戏编程
本项目由多个小游戏组成,运行程序后出现一个菜单,选择数字1,2,--进入相应的游戏程序.游戏完成后,返回本界面,选择数字0,退出程序. 进入程序后菜单如下: 1.彩票. 参考题3.15, to gen ...
- 性能测试的分析和调优
性能测试的分析和调优 步骤:确定问题(测试) -- 分析问题原因(开发) -- 给出解决方案(开发) -- 验证问题(测试) -- 分析结果(测试/开发) 从资源方面来看: CPU:用户CPU.系统C ...
- java递归空瓶换饮料_问题描述:一次买n瓶可乐,k个空瓶可以换一瓶饮料,那么一共能喝多少瓶饮料? | 学步园...
/** *问题描述:一次买n瓶可乐,k个空瓶可以换一瓶饮料,那么一共能喝多少瓶饮料? *下面用不同的方法实现了这个问题(Java实现): *1.递归方法 *2.非递归方法 *3.公式法 */ publ ...
- 【Java】设计Java程序,假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料?
用Java做出:假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,算出总共喝了多少瓶饮料? 题目分析:首先算出五十瓶饮料瓶可以换多少新的饮料 其次算出多兑换的饮料可以兑换多少瓶饮料 一直到瓶子低 ...
- java实现:啤酒2元一瓶,10个盖子可以换一瓶啤酒,4个瓶子可以换一瓶啤酒,请问x元最多可换多少瓶啤酒
花钱买酒 import java.util.Scanner;public class Maijiu {public static void main(String[] args) {// TODO A ...
最新文章
- 题目1162:I Wanna Go Home
- 微信-支付宝-支付响应体
- SpringMVC:学习笔记(5)——数据绑定及表单标签
- 超级usb万能启动盘
- 1G服务器网站,1核1g内存云服务器建网站
- const、volatile、mutable关键字
- Java酒店管理系统项目
- iphone手机屏幕开发尺寸
- 免费遥感图像数据共享网汇总
- [原]最初的梦想---关于野猪和家猪
- DevC++ 调试的时候闪退解决办法
- c++ 求四边形面积和周长_C++几何图形面积周长计算
- 通过域名解析对应的IP地址
- 基于Matlab的火灾预警系统
- dmidecode服务器型号,linux dmidecode查看服务器硬件信息
- 用html代码制作一个表情图片,canvas绘制一个常用的emoji表情
- win10桌面计算机怎么显示器,win10电脑三分屏怎么设置_win10电脑怎么分屏3个显示器...
- java对接杉德支付完整代码
- 多线程 - 三种实现
- 羧基修饰的聚苯乙烯微球(红色、橙色、绿色)的产品简介
热门文章
- 如何对Windows 2000中出现的“Stop 0x0000007B”错误信息进行故障诊断 1
- 矩阵分析:Kronecker积,Hadamard积
- xp下 c语言用什么编程软件,学C语言在windows XP环境下用什么编程软件好??
- EurekaServer这几个错误 你可以这样解决
- Arduino 中String 与char *,char[]之间赋值
- 老农的计算机学习笔记(一)计算机的诞生及其基础
- python count函数时间复杂度_关于python:了解如何测量函数的时间复杂度
- 学习半年Java的初次经验分享
- 编写计算机程序的几个步骤,第1讲程序设计的一般步骤ok.doc
- 神舟zx8sp7s2装linux,战神ZX8-SP7S2游戏本搭GTX1070+桌面i7芯