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

泊松分酒

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

有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布。

有一次闲暇时,他提出过一个有趣的问题,后称为:“泊松分酒”。

在我国古代也提出过类似问题,遗憾的是没有进行彻底探索,其中流传较多是:“韩信走马分油”问题。

有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

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

注意:

请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!

请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。

相关的工程文件不要拷入。

请不要使用package语句。

源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。

 

package java历年真题;
import java.io.*;
import java.util.Scanner;
public class 泊松分酒_43 {
static int a,b,c;//三个瓶子的大小
static int aid;//目标酒量
static int sa,sb,sc;//三个瓶子中的酒量
static void f(int sa,int sb,int sc){
	System.out.println(sa+","+sb+","+sc);
	if(sa == aid || sb == aid || sc == aid){
		System.out.println("end!");
		System.exit(0);
	}
	/*
	 * 1.c中瓶子没满,b中倒入c中
	 * 2.c满,倒入a中
	 * 3.b空,a倒入b中
	 */
	if(sb!=0 && sc <c){//b中有酒,c没满
		if(sb <= c-sc){
			f(sa,0,sc+sb);
		}else{
			f(sa,sb-(c-sc),c);
		}
	}
	else if(sc == c){//c满,给a倒
		if(a-sa<=sc){
			f(a,sb,sc-a+sa);
		}else{
			f(sa+sc,sb,0);
		}
	}
	else if(sb == 0){//b空,a给b倒
		if(sa>=b){
			f(sa-b,b,sc);
		}else{
			f(0,sa,sc);
		}
	}
}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner s = new Scanner(System.in);
		a = s.nextInt();
		b = s.nextInt();
		c = s.nextInt();
		sa = s.nextInt();
		sb = s.nextInt();
		sc = s.nextInt();
		aid = s.nextInt();
		f(sa,sb,sc);
	}

}
结果:

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

end!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值