泊松分酒问题:

初始酒量是 12 0 0,然后通过三个不同容量的瓶子(12L、8L、5L)倒出6L的酒出来

程序逻辑分析:

一下倒酒方式结果必须是可以结算出来的

当2为空的时候,1开始往2里面倒酒,出现两种情况,

一种:2满了,1还有剩余(2刚好满,1为0也考虑进来),这样的话就会出现1和2都有酒

另外一种:2没满,1没有剩余,这样的话1没有酒,2有酒

接上面,当2不为空,且3里面没满,出现两种情况

一种:3满了,2还有剩余(3刚好满2刚好为0也考虑进来),这样的话就会出现3和2都有酒

另外一种:3没满,2没有剩余,这样的话3有酒,2没有酒

接上面,当3满了之后,就向1里面添加酒,出现两种情况

一种:1满了,3还有剩余(1刚好满,3刚好为0也考虑进来),这样的话就会出现1和3都有酒

另外一种:1没满,3没有剩余,这的话就会出现1有酒,3没有酒的情况。

程序中参数解释:

b1 ,b2,b3指的是瓶子的容量;

bb1,bb2,bb3指的是瓶子内的酒量;

代码:

解释:有人会有疑问bb3==m是多余的,因为当前bb3的取值范围是bb3<=b3,这就是它的取值范围。但是b3的初始化值是会发送改变的,因为程序是会被改的。

解释:

if(bb2+bb3<=b3):if(bb2+bb3<=b3)说明bb2和bb3加起来的容量刚好或者还没倒满b3瓶子。这样的话bb2(b2)的里面当前是0,而bb3(b3)里面是他们两个的和。bb1(b1)不发送改变(因为我们没有动它啊);

else:说明bb2和bb3加起来要大于b3所能盛放的容量。这样的话,b3倒满之后,b2还有剩余,剩余的量bb2-(b3-bb3);

解释:

if(bb3+bb1<=b1):同理说明倒完后瓶子b1没有满;

else:同理说明倒满了,b3瓶子还有剩余。

解释:

bb1>=b2:同理,说明b2倒满了,那么b2的当前酒量就是b2,b1的当前的酒量就是bb1-b2

else:同理,说明b2没有倒满,那么bb1里面的酒量为0,bb2里面的容量就是bb1的酒量。

将每次酒杯还存在的酒量结果打出来

启动程序

运行结果

贪心算法:

import java.util.Scanner;/**** 取三个瓶子,分别放入3 5 8   量取的时候只需要取两个在它左右两边的即可,例如 取4 的话我们只需要3 6这两个瓶子,* 倒满大瓶子,然后倒满小瓶子里面,(判断大瓶子是否已经成立)然后倒掉小瓶子,在把剩下的倒入到小瓶子里面* 倒满大瓶子,然后倒满小瓶子里面,(判断大瓶子是否已经成立然后倒掉小瓶子,在把剩下的倒入到小瓶子里面*/
public class Main1 {public static void main(String[] args){Scanner in = new Scanner(System.in);int  X = in.nextInt();int Y = in.nextInt();int Z = in.nextInt();int CON = in.nextInt();int time=0;int[] arr={X,Y,Z};insertSort(arr);int[] pos = getPos(arr, CON);int min=pos[0];int max=pos[1];int x=0;int y=0;time=getMin(x,y,min,max,CON,time);System.out.print(time);}private static int[] getPos(int[] arr,int CON) {for (int i = 0; i < arr.length-1; i++) {if (arr[i]<CON && arr[i+1]>CON){return new int[] {arr[i],arr[i+1]};}}return new int[] {0,1};}public static void insertSort(int[] arr){if (arr.length<=1 || arr==null){return;}for (int i = 1; i <arr.length ; i++) {for (int j = i-1; j >=0 ; j--) {if (arr[j]>arr[j+1]){swap(arr,j,j+1);}else {break;}}}}public static void swap(int[] arr,int L,int R){int temp=arr[L];arr[L]=arr[R];arr[R]=arr[L];}private static int getMin(int x, int y,int min,int max, int continer,int time) {if (x==continer){return x;}else if (y==continer){return y;}time++;y=max;y=max-(min-x);time++;x=min;if (y==continer){return time;}time++;x=0;time++;x=y;time=getMin(x,y,min,max,continer,time);return time;}
}
/**** 取三个瓶子,分别放入3 5 8   量取的时候只需要取两个在它左右两边的即可,例如 取4 的话我们只需要3 6这两个瓶子,* 倒满大瓶子,然后倒满小瓶子里面,(判断大瓶子是否已经成立)然后倒掉小瓶子,在把剩下的倒入到小瓶子里面* 倒满大瓶子,然后倒满小瓶子里面,(判断大瓶子是否已经成立然后倒掉小瓶子,在把剩下的倒入到小瓶子里面*/

穷举、贪心算法--泊松分酒(2)相关推荐

  1. 泊松分酒 java课件_泊松分酒原理 - 我类个擦的个人空间 - OSCHINA - 中文开源技术交流社区...

    有一个12品脱(pint)的酒瓶,里面装满葡萄酒,另有8品脱和5品脱的瓶子各一个.问如何从中分出6品脱的酒出来? 传说泊松年轻时成功解决了该问题,勾起了他对数学的兴趣而投身数学研究,因此该问题被称为泊 ...

  2. 蓝桥杯泊松分酒java_【蓝桥杯】泊松分酒

    题目: 泊松是法国数学家.物理学家和力学家.他一生致力科学事业,成果颇多.有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布. 有一次闲暇时,他提出过一个有趣的问题,后称为:"泊 ...

  3. 蓝桥杯泊松分酒java_蓝桥杯-泊松分酒 - steven_wjg的个人空间 - OSCHINA - 中文开源技术交流社区...

    泊松是法国数学家.物理学家和力学家.他一生致力科学事业,成果颇多.有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布. 有一次闲暇时,他提出过一个有趣的问题,后称为:"泊松分酒& ...

  4. 泊松分酒 泊松是法国数学家、物理学家和力学家。他一生致力科学事业,成果颇多。

    package org.bluebridge.topics;/*泊松分酒泊松是法国数学家.物理学家和力学家.他一生致力科学事业,成果颇多.有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布 ...

  5. 算法:(二)枚举(穷举)算法

    目录 枚举(穷举)算法 实例1.填数字游戏 解题方法 实例2.填运算法符 解题方法 枚举(穷举)算法 算法思路 枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件: (1)可预 ...

  6. 泊松分酒(泊松是法国数学家、物理学家和力学家。他一生致力科学事业,成果颇多。有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布。 有一次闲暇时,他提出过一个有趣的问题,后称为:)

    /*** 泊松是法国数学家.物理学家和力学家.他一生致力科学事业,成果颇多.有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布.有一次闲暇时,他提出过一个有趣的问题,后称为:"泊 ...

  7. Java实现 泊松分酒

    泊松是法国数学家.物理学家和力学家.他一生致力科学事业,成果颇多.有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布. 有一次闲暇时,他提出过一个有趣的问题,后称为:"泊松分酒& ...

  8. 泊松分酒--蓝桥杯java历年真题

    泊松分酒 泊松是法国数学家.物理学家和力学家.他一生致力科学事业,成果颇多. 有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布. 有一次闲暇时,他提出过一个有趣的问题,后称为:" ...

  9. 三个瓶子分酒c语言源码,泊松分酒原理 - 我类个擦的个人空间 - OSCHINA - 中文开源技术交流社区...

    有一个12品脱(pint)的酒瓶,里面装满葡萄酒,另有8品脱和5品脱的瓶子各一个.问如何从中分出6品脱的酒出来? 传说泊松年轻时成功解决了该问题,勾起了他对数学的兴趣而投身数学研究,因此该问题被称为泊 ...

  10. 青蛙跳跃对调位置游戏的穷举解决算法

    游戏在这里青蛙跳跃小游戏,让左边的青蛙和右边的青蛙对调位置.左边和右边各有三只青蛙,中心处有一个空位.每次可以跳一个青蛙,要么向前跳一格,要么跨过前方的青蛙跳一格,青蛙不能重叠,不能往回跳. 下面是解 ...

最新文章

  1. JSP完全自学手册图文教程
  2. 什么是服务器端口?服务器端口都有哪些?
  3. Linux 允许指定IP访问目录
  4. Git的commit之后的撤销reset
  5. python boxplot pvalue_1.1.1数据质量分析Python boxplot,111,箱,线图
  6. 为什么在子类中不重写超类的实例变量
  7. 讲讲 MySQL 中的 WAL 策略和 CheckPoint 技术
  8. python查看对象占用内存_『Python』内存分析_List对象内存占用分析
  9. Linux是命令行吗,你真的了解Linux命令吗?
  10. layui表格合并单元格多表_layui合并单元格各种办法
  11. python3.9.5安装教程加汉化
  12. 解决chrome(谷歌)浏览器打开文件选择框响应速度慢的问题-小白实操记录
  13. 设计模式(四) 策略模式
  14. 运动世界校园【夜神模拟器】5.30
  15. API拦截方法一:PE简介
  16. 基于javaweb的自习室图书馆座位预约管理系统(java+ssm+jsp+easyui+mysql)
  17. js可以打开mat文件吗_企业微信最大可以传多大文件?企业微信发送文件有限制吗?...
  18. 虚拟机下 ubuntu 显示屏幕太小问题
  19. xml生成xsd文件的方法
  20. 自动解锁Bitlocker加密硬盘

热门文章

  1. EXCEL常用技巧总结
  2. windows远程连接不能复制粘贴
  3. iMazing中IPA文件的介绍与管理
  4. aws打开慢_亚马逊AWS服务器访问较慢,如何快速访问AWS服务器呢?
  5. Java课程寒假之开发记账本软件(网页版)之三
  6. c语言关键字code什么意思,C语言中的32个关键字分别是什么意思?
  7. 浅谈如何在优麒麟22.04中使用Eigenstrat和Plink工具生成类23andMe格式原始数据
  8. Java项目:人才求职招聘管理系统(java+SpringBoot+FreeMarker+JPA+Mysql)
  9. java抽象类重载_012 JAVA 抽象类、接口、String类的基础了解
  10. 使用者多注意! 多件恶意软件潜入Google Play商店