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
- 2016蓝桥杯假期任务之《泊松汾酒》
- 2016蓝桥杯假期任务之《振兴中华》
- 2016蓝桥杯假期任务之《 黄金连分数》
- 2016蓝桥杯假期任务之《有理数类》
- 2016蓝桥杯假期任务之《三部排序》
- 2016蓝桥杯假期任务之《错误票据》
- 2016蓝桥杯假期任务之《幸运数》
- 2016蓝桥杯假期任务之《带分数》
- 2016蓝桥杯假期任务之《武功秘籍》
- 2016蓝桥杯假期任务之《切面条》
- 2016蓝桥杯假期任务之《猜字母》
- 2016蓝桥杯假期任务之《圆周率》
- 2016蓝桥杯假期任务之《扑克序列》
- 2016蓝桥杯假期任务之《分糖果》
- 2016蓝桥杯假期任务之《饮料换购》
- 2016蓝桥杯假期任务之《括号问题》
- 2016蓝桥杯假期任务之《复数运算》
- 2016蓝桥杯假期任务之《矩形运算》
- Android开发之WebService介绍
- Change Queue Not Work In Unity Shader
- hdu 4003 Find Metal Mineral(树形dp+分组背包)
- swift中实现description
- 关于VC中 error C2871: 'std' : does not exist or is not a namespace
- 2016蓝桥杯假期任务之《泊松汾酒》
- C#上机实验(三)
- EasyUI - datagrid属性idField详解
- Linux中常用操作命令
- 重写 strlen
- Android Light开发(一)
- nyoj--58 最少步数
- 关于Windows下命令行的路径问题
- Android学习之如何在同一个Activity使用多个ListView