/*泊松是法国数学家、物理学家和力学家。他一生致力科学事业,成果颇多。有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布。有一次闲暇时,他提出过一个有趣的问题,后称为:“泊松分酒”。在我国古代也提出过类似问题,遗憾的是没有进行彻底探索,其中流传较多是:“韩信走马分油”问题。有3个容器,容量分别为12升,8升,5升。其中12升中装满油,另外两个空着。要求你只用3个容器操作,最后使得某个容器中正好有6升油。下面的列表是可能的操作状态记录:12,0,04,8,04,3,59,3,09,0,31,8,31,6,5每行3个数据,分别表示12,8,6升容器中的油量第一行表示初始状态,第二行表示把12升倒入8升容器后的状态,第三行是8升倒入5升,...当然,同一个题目可能有多种不同的正确操作步骤。本题目的要求是,请你编写程序,由用户输入:各个容器的容量,开始的状态,和要求的目标油量,程序则通过计算输出一种实现的步骤(不需要找到所有可能的方法)。如果没有可能实现,则输出:“不可能”。例如,用户输入:12,8,5,12,0,0,6用户输入的前三个数是容器容量(由大到小),接下来三个数是三个容器开始时的油量配置,最后一个数是要求得到的油量(放在哪个容器里得到都可以)则程序可以输出(答案不唯一,只验证操作可行性):12,0,04,8,04,3,59,3,09,0,31,8,31,6,5每一行表示一个操作过程中的油量状态。注意:请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。  */
import java.util.Scanner;
public class Demo16 {// 有6种倒酒方法,x[0]->y[0]即("0"->"1")代表第一个瓶子向第二个瓶子倒酒,后即同理static int[] x = {0,1, 2};    // 0 为第一个瓶子,1为第二个瓶子 ,2为第三个瓶子static int[] y = {1,2, 0};static int[][] rr = new int[1000][3]; // 记录倒酒后每一行结果static int index = 0;static int count = 0;static int[] tt= {0,0,0};// 输入数据public static int[] input(){Scanner scan = new Scanner(System.in);String [] s = scan.nextLine().split(",");int[] temp = new int[s.length];for(int i=0;i<s.length;i++){ // 字符转为数字temp[i] = Integer.parseInt(s[i]);}return temp;}// 输出public static void print(int[][] rr){for(int i=0;i<index;i++){for(int j:rr[i])System.out.print(j+"\t");System.out.println();}System.out.println("记录数:("+index+")");}// 记录步骤public static void record(int[] cur){rr[index][0] = cur[0];rr[index][1] = cur[1];rr[index][2] = cur[2];index++;}// 判断当前的记录 是否 在以前的记录里 存在public static boolean curExist(int[] cur){for(int i=0;i<index;i++){if(rr[i][0]==cur[0] && rr[i][1]==cur[1] && rr[i][2]==cur[2]){return true;}}return false;}// 倒酒public static void pour(int[] v,int[] cur,int i){count++;   // 统计倒酒的次数, 若倒酒次数超过1000次,则识为"不可能"int r = v[y[i]] - cur[y[i]];    // 计算 y瓶中还可以装入多少酒,拿y瓶的总容量-y瓶当前的酒if(cur[x[i]] > r){    // x > y 时cur[y[i]] = v[y[i]];  // y = 满cur[x[i]] -= r;       // x = x - r}else{     // x <= ycur[y[i]] += cur[x[i]];  // y = y + xcur[x[i]] = 0;           // x = x - r}}// 求解public static void f(int[] v,int[] cur,int m){if(m>v[0]){System.out.println("要求得到的油量"+m+"大于最大容器"+v[0]+",所以\n不可能");return;}boolean flag = true;record(cur);while(flag){if(count>1000){System.out.println("倒酒次数超过1000次,所以\n不可能");return;}for(int i=0; i<3; i++){ // 6种倒酒方法// 找到解,退出if(cur[0]==m || cur[1]==m || cur[2]==m){print(rr);   // 找到解,输出记录flag = false;break;}// 如果 x 瓶中为空,则跳过, 执行下一轮倒酒if(cur[x[i]] == 0){    continue;}pour(v,cur,i);// 倒酒// 记录步骤if(curExist(cur)){cur[0] = rr[index-1][0]; // 还原为上次倒酒的值cur[1] = rr[index-1][1];cur[2] = rr[index-1][2];//--index;continue;}else{record(cur);}}}}// 主函数public static void main(String[] args){System.out.println("输入数据(格式为7个数字用\",\"号隔开,例:)12,8,5,12,0,0,6");int[] t = input();        // 输入数据int[] v =  {t[0],t[1],t[2]};    // 每个容器的最大容量 vint[] cur = {t[3],t[4],t[5]};    // 容器的开始的状态 initint m = t[6];      // 要求得到的油量  rf(v,cur,m);}
}

运行结果:

输入数据(格式为7个数字用","号隔开,例:)12,8,5,12,0,0,6
12,8,5,12,0,0,6
12  0   0
4   8   0
4   3   5
9   3   0
9   0   3
1   8   3
1   6   5
记录数:(7)

泊松是法国数学家、物理学家和力学家。他一生致力科学事业,成果颇多。 有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布。相关推荐

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

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

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

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

  3. 法国优秀的五位数学家

    笛卡儿 勒内·笛卡儿,1596年3月31日生于法国安德尔-卢瓦尔省的图赖讷拉海,1650年2月11日逝世于瑞典斯德哥尔摩,是法国著名的哲学家.数学家.物理学家. 他是西方近代哲学奠基人之一.他对现代数 ...

  4. 美国印第安纳大州Purdue(普杜)大学的法国数学家Louis de Branges de Bourcia周二表示已经证明了黎曼猜想

    [八阕]6月12日消息,来自美国印第安纳大州Purdue(普杜)大学的法国数学家Louis de Branges de Bourcia周二表示已经证明了黎曼猜想.一旦被证实,这将是数学领域的又一大突破 ...

  5. 法国数学家梅齐亚克的砝码问题

    法国数学家梅齐亚克在他著名的<数字组合游戏>(1962)中提出了一个问题:一位商人有一个重40磅的砝码,一天不小心将砝码摔成了四块.后来商人称得每块的重量都是整磅数,而且发现这四块碎片可以 ...

  6. 【C编程】找出7个默森尼数。法国数学家默森尼曾提出下列公式:Mp=2^p-1。当p是素数并且Mp也是素数时,称Mp为默森尼数,

    /*找出7个默森尼数.法国数学家默森尼曾提出下列公式:Mp=2^p-1.当p是素数并且Mp也是素数时,称Mp为默森尼数, 例如,p=5,Mp=2^5-1=31,5和31都是素数,因此31是默森尼数;而 ...

  7. 找出7个默森尼数。法国数学家默森尼曾提出下列公式:Mp=2^p-1。

    找出7个默森尼数.法国数学家默森尼曾提出下列公式:Mp=2^p-1.    当p是素数并且Mp也是素数时,称Mp为默森尼数,    例如,p=5,Mp=2^5-1=31,5和31都是素数,因此31是默 ...

  8. 找出7个默森尼数。法国数学家默森尼曾提出下列公式:Mp=2^p-1。当p是素数并且Mp也是素数时,称Mp为默森尼数, 例如,p=5,Mp=2^5-1=31,5和31都是素数,因此31是默森尼数;而Mp

    找出7个默森尼数.法国数学家默森尼曾提出下列公式:Mp=2^p-1.当p是素数并且Mp也是素数时,称Mp为默森尼数, 例如,p=5,Mp=2^5-1=31,5和31都是素数,因此31是默森尼数;而Mp ...

  9. *约瑟夫问题。这是十七世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个基督教徒和15个异教徒在海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了个办法:30个人围成一个圆

    *约瑟夫问题.这是十七世纪的法国数学家加斯帕在<数目的游戏问题>中讲的一个故事:15个基督教徒和15个异教徒在海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了个办法:30个 ...

最新文章

  1. 关于Centos下Clamv反病毒软件包更新问题
  2. [日常] Go语言圣经-Deferred函数
  3. 计算机操作员高级理论试题答案,计算机操作员高级理论试题答案1.doc
  4. 【深度学习】基于Pytorch多层感知机的高级API实现和注意力机制(一)
  5. 【学术相关】为什么很多国内学者的AI的论文复现不了?
  6. [渝粤教育] 西南科技大学 管理信息系统 在线考试复习资料(1)
  7. C++工作笔记-根据父类指针获取子类类型(或不同的对象)
  8. OAuth 2.0——授权服务开发笔记(一)
  9. Android 8.0 学习(14)---Android8.0适配分析
  10. 计算机重启是什么原因,电脑自动重启是什么原因
  11. 文件上传 文件大小和类型
  12. Visual Studio设置代码注释(包括作者版本信息)
  13. 若何设定Linux把持系统的启动暗码
  14. 阿里云云计算 31在线实验--弹性伸缩(AS)初体验
  15. 3D Photography using Context-aware Layered Depth Inpainting-论文主要内容翻译
  16. 启动docker容器时报iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport错误
  17. iP地址查询、手机号归属地查询
  18. Faster-RCNN简易复现
  19. 计算机二级oracle,关于计算机考试
  20. 微淼联合创始人孙延芳:以合规为第一要义,做财商教育“正规军”

热门文章

  1. CPU巨头英特尔盯上GPU会咋样?
  2. 知识储备在需要积累,在一定时候才能够呈现指数级的增长
  3. 使用长方体类计算长方体的表面积和
  4. 界面/功能都很惊艳:iPad版Office上手体验
  5. Step7 Scout Simotion在线时无法在线的一个原因
  6. 解决ubuntu安装wine-QQ,wechat后出现字体乱码问题
  7. type在linux什么命令,Linux type命令
  8. Flask 学习-8. jsonify返回中文没正常显示问题
  9. 如何分析软件测试结果,软件测试结果对比
  10. 新一代信息技术-大数据