2016蓝桥杯假期任务之《泊松汾酒》

来源:互联网 发布:使用c语言完成http请求 编辑:程序博客网 时间:2024/05/17 02:24


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

    有一次闲暇时,他提出过一个有趣的问题,后称为:“泊松分酒”。在我国古代也提出过类似问题,遗憾的是没有进行彻底探索,其中流传较多是:“韩信走马分油”问题。

    有3个容器,容量分别为12升,8升,5升。其中12升中装满油,另外两个空着。要求你只用3个容器操作,最后使得某个容器中正好有6升油。

    下面的列表是可能的操作状态记录:
12,0,0
4,8,0
4,3,5
9,3,0
9,0,3
1,8,3
1,6,5

    每行3个数据,分别表示12,8,6升容器中的油量

    第一行表示初始状态,第二行表示把12升倒入8升容器后的状态,第三行是8升倒入5升,...

    当然,同一个题目可能有多种不同的正确操作步骤。

    本题目的要求是,请你编写程序,由用户输入:各个容器的容量,开始的状态,和要求的目标油量,程序则通过计算输出一种实现的步骤(不需要找到所有可能的方法)。如果没有可能实现,则输出:“不可能”。

    例如,用户输入:
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

    每一行表示一个操作过程中的油量状态。

   

代码如下:

import java.util.*;public class Main {static int a,b,c;static String str2="";    public static void main(String[] args) {    Scanner input=new Scanner(System.in);    String str1=input.nextLine();    String []s1=str1.split(",");    a=Integer.parseInt(s1[0]);    b=Integer.parseInt(s1[1]);    c=Integer.parseInt(s1[2]);    int a1=Integer.parseInt(s1[3]);    int b1=Integer.parseInt(s1[4]);    int c1=Integer.parseInt(s1[5]);    int result=Integer.parseInt(s1[6]);    if (a1+b1+c1>=result)    {    bosong(a1,b1,c1,result);    }    else    {    System.out.println("不可能");    }}private static void bosong(int a1, int b1, int c1,int result) {String s2=a1+","+b1+","+c1;System.out.println(s2);if (str2.contains(s2)){System.out.println("不可能");return;}str2+="["+s2+"]";if (a1==result||b1==result||c1==result){return;}if (c1==0&&b1!=0){bosong(a1,b1>c?b1-c:0,b1>c?c:b1,result);}else{if (c1==c){bosong(a-a1>c?a1+c:a,b1,a-a1>c?0:a1+c-a,result);}else{if (a1!=0&&b1!=b){bosong(a1>b-b1?a1-b+b1:0,a1>b-b1?b:a1+b1,c1,result);}else{if (b1!=0&&c1!=c){bosong(a1,b1>c-c1?b1-c+c1:0,b1>c-c1?c:b1+c1,result);}else{System.out.println("不可能");}}}}}}


 运行结果:

12,8,5,12,0,0,612,0,04,8,04,3,59,3,09,0,31,8,31,6,5


    
    
   


   





0 0
原创粉丝点击