穷举法-柏松分酒

2024-04-10 00:18
文章标签 穷举法 柏松 分酒

本文主要是介绍穷举法-柏松分酒,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  
  1. /**
  2. * 穷举法:泊松分酒
  3. *
  4. * @author timmy1
  5. *
  6. */
  7. public class ShareWine {
  8. private int cup1 = 12;// 第一个杯子的容量
  9. private int cup2 = 8;// 第二个杯子容量
  10. private int cup3 = 5;// 第三个杯子容量
  11. private int result = 6;// 目标酒量
  12. // 假设有三个杯子,容量分别为: 12L,8L,5L,现在想通过这三个杯子得到6L酒。
  13. // 分酒的策略为从第一个杯子倒酒到第二个杯子,从第二个杯子倒酒到第三个杯子,从第三个杯子倒酒到第一个杯子-》循环
  14. // 每次倒酒都要倒满或者一个杯子全部倒空
  15. /**
  16. * @param w1
  17. * 第一个杯子当前的酒量
  18. * @param w2
  19. * @param w3
  20. */
  21. public void shareWine(int w1, int w2, int w3) {
  22. System.out.println("杯子1:" + w1 + " 杯子2: " + w2 + " 杯子3: " + w3);
  23. // 如果三个杯子其中有一个杯子的酒量为目标酒量->结束
  24. if (w1 == result || w2 == result || w3 == result) {
  25. return;
  26. }
  27. if (w2 != 0 && w3 != cup3) {// 第二个杯子倒酒到第三个杯子->第二个杯子要有酒,且第三个杯子没有倒满
  28. if (w2 + w3 <= cup3) {
  29. shareWine(w1, 0, w3 + w2);
  30. } else {
  31. shareWine(w1, w2 - (cup3 - w3), cup3);
  32. }
  33. } else if (w3 == cup3) { //第三个杯子往第一个杯子中倒酒 ->第三个杯子的酒倒满了
  34. if (w1 + w3 <= cup1) {
  35. shareWine(w1 + w3, w2, 0);
  36. } else {
  37. shareWine(cup1, w2, w3 - (cup1 - w1));
  38. }
  39. } else if (w2 == 0) {// 第一个杯子倒酒到第二个杯子->第二个杯子空了
  40. if (w1 >= cup2) {
  41. shareWine(w1 - cup2 , cup2, w3);
  42. } else {
  43. shareWine(0, w1, w3);
  44. }
  45. }
  46. }
  47. public static void main(String[] args) {
  48. ShareWine shareWine = new ShareWine();
  49. shareWine.shareWine(12, 0, 0);
  50. }
  51. }

结果打印:

杯子1:12 杯子2: 0 杯子3: 0

杯子1:4 杯子2: 8 杯子3: 0

杯子1:4 杯子2: 3 杯子3: 5

杯子1:9 杯子2: 3 杯子3: 0

杯子1:9 杯子2: 0 杯子3: 3

杯子1:1 杯子2: 8 杯子3: 3

杯子1:1 杯子2: 6 杯子3: 5



这篇关于穷举法-柏松分酒的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/889611

相关文章

加号改乘号 (穷举法)

题目大意  把1+2+3+…+48+49中的两个加号改成乘号(修改位置不能相邻), 使得式子的结果由1225变为2015。 比如: 1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015 就是符合要求的答案。  请你寻找另外一个可能的答案, 并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。  注意:需要你提交的是一个整数,不要填写任

前端基础入门三大核心之JS篇:解锁「穷举法」算法的奥秘【含代码示例】

前端基础入门三大核心之JS篇:解锁「穷举法」算法的奥秘【含代码示例】 穷举法基本概念及其作用什么是穷举法?作用说明 穷举法实战演练示例1:找出1到100之间的所有质数示例2:经典的数独求解性能优化与安全考量 实际工作中的技巧遇到问题怎么办?结语与讨论 在前端开发的浩瀚宇宙里,JavaScript(简称JS)如同一颗璀璨的星辰,引领着无数开发者探索逻辑与创意的无限可能。今天,我们不妨

西南交大swjtu算法实验3.3|穷举法

1.实验目的 通过具体例子学习排列这种典型的穷举算法的求解过程以及程序框架,分析其算法的求解过程,以及如何设计穷举法解决实际问题。通过本实验,理解穷举法的特点以及实际应用中的局限性。   2.实验任务 有n (n>=1)个任务需要分配给n个人执行,每个任务只能分配给一个人,每个人只能执行一个任务,第i个人执行第j个任务的成本是c[i][j](1<=i ,j<=n)。求出总成本最小的一种分配

C语言及程序设计初步例程-40 穷举法解题

贺老师教学链接  C语言及程序设计初步 本课讲解 穷举法求解:百鸡百钱问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? #include <stdio.h>int main(){int x,y,z; //定义数据类型为整型,买鸡和买烤鸡不是一个概念for(x=0; x<=20; ++x)for(y=0; y<=33; ++y) //穷举中。

讨论动态规划的优点 - 相比于穷举法 - (以最短路径为例)

讨论动态规划的优点 - 相比于穷举法 - (以最短路径为例) 一、熟知动态规划有以下的优点: 优点1.减少了计算量,随着段数的增加,计算量大大减少。 优点2.计算中得到了很多有用的中间过程,不仅得到了出发点到终点的最短路径,而且得到了中间各点到终点的最短路径。 二、回顾动态规划的基本思想: 三、通过以下例子,我们将清楚的看到动态规划的优点:(以最短路径为例) 1、段数较少 以下

枚举算法(穷举法)(暴力法)

1.什么是枚举 枚举是指在一定范围内将所有情况一一列举,再通过条件判断得到自己想要的答案; 2.枚举核心 3.使用枚举的基本步骤    4.例题 4.1.我国古代数学家张丘建在他的《算经》一书中提出了著名的“百钱买百鸡”问题:鸡翁一值钱五;鸡母一值钱三;鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? 枚举对象:坤翁:x;坤母:y;坤雏:z(100 - x - y); 枚举

3.1.1矩阵连乘问题之穷举法

public class test3_1_1 {public static void matrixMultiply(int[][] a,int[][] b,int[][] c,int ra,int ca,int rb,int cb){if(ca!=rb){ //若矩阵A的列数≠矩阵B的行数,则无法相乘System.err.println("矩阵无法相乘");return;}for(int i=0

【Python练习】用穷举法计算抽旺仔牛奶民族罐的几率_1

需求描述: 旺仔牛奶民族罐每箱12罐,假设在完全随机的情况下,计算买多少箱抽到56个不同民族的几率各有多少 用到的知识点及用法: 1、list处理,计算结果用到list去重并计算个数 2、Python连接数据库,用于存储试验数据 3、为了缩短计算时间,用进程池的方式,多进程运算 4、random随机选取 关键步骤及代码: 1、数据库准备 建表 drop table if exi

第八周—C语言 穷举法(谁是小偷)

/*烟台大学计算机学院 2016作者: 张威完成日期:2016年10月22日问题描述:警察局抓住了A B C D四名盗窃嫌疑犯,其中只有一人是小偷。审问时。A说:“我不是小偷”;B说:“C是小偷”;C说:“小偷肯定是D”;D说:“C在冤枉好人”,现已知道这四人中有一人在说谎,三人说的是真话。问小偷是谁。*/#include <stdio.h>#include <stdlib.h>i

第9周项目6-穷举法解决几何问题(3)

问题及代码: /**Copyright(c)2014,烟台大学计算机学院*Allrights reserved.*文件名称:MADE25.cpp*作 者:孙化龙*完成日期:2014年10月27日*版 本 号:v1.0**问题描述:4人年龄为等差数列,且相加为26,乘积为880,求以他们年龄为等差数列的前20项。*输入描述:无*输出描述:以他们年龄为等差数列的前20项*