豆机

首先对每个豆子单独分析一下,若有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】高尔顿瓶相关推荐

  1. ***6.21-豆机 梅花瓶 高尔顿瓶

    问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:Slots.java *作 者:单昕昕 *完成日期:20 ...

  2. 模拟豆机、高尔顿瓶【java】

    package text1_3; //产生随机数0与1表示球的路径,最后狭槽中的小球数量可以用一个数组记录并且步数等于狭槽数-1:小球最终进入哪个槽中与向右的数量有关,并且是相等的 import ja ...

  3. java空瓶换饮料的程序实现

    package com.JavaApi.file;/*** 需求:一瓶饮料价格 1 元,两个空瓶可以换一瓶,三个盖子也能换一瓶,* 问:不赊账,用 20 元最多能买几瓶?**/public class ...

  4. Java一瓶可乐_Java实现可乐瓶问题

    题目:一瓶可乐要1元钱,2个空瓶可以换1瓶,现在你有20元,问--你最多可以喝到几瓶可乐? 注:欢迎留言交流! package set; /* * 逻辑问题: * ---------- * 1元可以买 ...

  5. 实验五_简单游戏编程

    本项目由多个小游戏组成,运行程序后出现一个菜单,选择数字1,2,--进入相应的游戏程序.游戏完成后,返回本界面,选择数字0,退出程序. 进入程序后菜单如下: 1.彩票. 参考题3.15, to gen ...

  6. 性能测试的分析和调优

    性能测试的分析和调优 步骤:确定问题(测试) -- 分析问题原因(开发) -- 给出解决方案(开发) -- 验证问题(测试) -- 分析结果(测试/开发) 从资源方面来看: CPU:用户CPU.系统C ...

  7. java递归空瓶换饮料_问题描述:一次买n瓶可乐,k个空瓶可以换一瓶饮料,那么一共能喝多少瓶饮料? | 学步园...

    /** *问题描述:一次买n瓶可乐,k个空瓶可以换一瓶饮料,那么一共能喝多少瓶饮料? *下面用不同的方法实现了这个问题(Java实现): *1.递归方法 *2.非递归方法 *3.公式法 */ publ ...

  8. 【Java】设计Java程序,假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料?

    用Java做出:假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,算出总共喝了多少瓶饮料? 题目分析:首先算出五十瓶饮料瓶可以换多少新的饮料 其次算出多兑换的饮料可以兑换多少瓶饮料 一直到瓶子低 ...

  9. java实现:啤酒2元一瓶,10个盖子可以换一瓶啤酒,4个瓶子可以换一瓶啤酒,请问x元最多可换多少瓶啤酒

    花钱买酒 import java.util.Scanner;public class Maijiu {public static void main(String[] args) {// TODO A ...

最新文章

  1. 题目1162:I Wanna Go Home
  2. 微信-支付宝-支付响应体
  3. SpringMVC:学习笔记(5)——数据绑定及表单标签
  4. 超级usb万能启动盘
  5. 1G服务器网站,1核1g内存云服务器建网站
  6. const、volatile、mutable关键字
  7. Java酒店管理系统项目
  8. iphone手机屏幕开发尺寸
  9. 免费遥感图像数据共享网汇总
  10. [原]最初的梦想---关于野猪和家猪
  11. DevC++ 调试的时候闪退解决办法
  12. c++ 求四边形面积和周长_C++几何图形面积周长计算
  13. 通过域名解析对应的IP地址
  14. 基于Matlab的火灾预警系统
  15. dmidecode服务器型号,linux dmidecode查看服务器硬件信息
  16. 用html代码制作一个表情图片,canvas绘制一个常用的emoji表情
  17. win10桌面计算机怎么显示器,win10电脑三分屏怎么设置_win10电脑怎么分屏3个显示器...
  18. java对接杉德支付完整代码
  19. 多线程 - 三种实现
  20. 羧基修饰的聚苯乙烯微球(红色、橙色、绿色)的产品简介

热门文章

  1. 如何对Windows 2000中出现的“Stop 0x0000007B”错误信息进行故障诊断 1
  2. 矩阵分析:Kronecker积,Hadamard积
  3. xp下 c语言用什么编程软件,学C语言在windows XP环境下用什么编程软件好??
  4. EurekaServer这几个错误 你可以这样解决
  5. Arduino 中String 与char *,char[]之间赋值
  6. 老农的计算机学习笔记(一)计算机的诞生及其基础
  7. python count函数时间复杂度_关于python:了解如何测量函数的时间复杂度
  8. 学习半年Java的初次经验分享
  9. 编写计算机程序的几个步骤,第1讲程序设计的一般步骤ok.doc
  10. 神舟zx8sp7s2装linux,战神ZX8-SP7S2游戏本搭GTX1070+桌面i7芯