写在前面:
泊松分酒:
法国著名数学家波瓦松在青年时代研究过一个有趣的数学问题:假设某人有12品脱的啤酒一瓶,想从中倒出六品脱,但是恰巧身边没有6品脱的容器,仅有一个8品脱和一个5品脱的容器,怎样倒才能将啤酒分为两个6品脱呢?现在,请你设计一个程序,可以根据输入的满瓶容量(a),和两个空瓶的容量(b和c)对倒,获得最终需要的容量(d)。
上周考笔试,有道题可能出现,想了N久也不会。最后考试中虽然没考它,但是突然就想明白了。
泊松分酒:
法国著名数学家波瓦松在青年时代研究过一个有趣的数学问题:假设某人有12品脱的啤酒一瓶,想从中倒出六品脱,但是恰巧身边没有6品脱的容器,仅有一个8品脱和一个5品脱的容器,怎样倒才能将啤酒分为两个6品脱呢?现在,请你设计一个程序,可以根据输入的满瓶容量(a),和两个空瓶的容量(b和c)对倒,获得最终需要的容量(d)。
上周考笔试,有道题可能出现,想了N久也不会。最后考试中虽然没考它,但是突然就想明白了。
- /**
- * @discription 酒瓶是8升酒,有两个杯,分别为3升和5升,现在想得到两杯4升的酒。
- * 肿么分这瓶酒啊?
- */
- void text(){
- fenjiu(8,5,3,4);
- fenjiu(12,8,5,6);
- }
/**
* @discription 酒瓶是8升酒,有两个杯,分别为3升和5升,现在想得到两杯4升的酒。
* 肿么分这瓶酒啊?
*/
void text(){
fenjiu(8,5,3,4);
fenjiu(12,8,5,6);
}
- /***
- * 倒酒方法
- * @param i 盛酒
- * @param j 倒酒
- * @param wine 三个容器中酒量的数组
- * @param cup 酒瓶和两个杯子容量的数组
- * @param sunxu 酒瓶和两个杯子顺序的数组
- * @param N 循环次数
- * @param d 要得到的酒量
- * @return
- */
- int daoba(int i,int j,int[]wine,int[]cup,int[]sunxu,int N,int d){
- int k = 3-i-j;
- if(wine[k]==0&&wine[i]!=0&&(wine[i]<cup[k]||wine[i]==cup[k])){
- wine[k]=wine[i];
- wine[i]=0;
- System.out.println("第"+sunxu[i]+"杯"+"倒, 第"+sunxu[k]+"杯");
- System.out.println(wine[0]+" "+wine[1]+" "+wine[2]);
- }
- System.out.println("第"+sunxu[j]+"杯"+"到, 第"+sunxu[i]+"杯");
- //第一杯不接满,第二杯倒空
- if(wine[j]+wine[i]<cup[i]){
- wine[i]+=wine[j];
- wine[j]=0;
- System.out.println(wine[0]+" "+wine[1]+" "+wine[2]);
- if(wine[i]==d&&wine[k]==d){
- N=1000;
- return N;
- }
- //第一杯接满,第二杯不到空
- }else if(wine[j]-cup[i]+wine[i]>0){
- wine[j]=wine[j]-cup[i]+wine[i];
- wine[i]=cup[i];
- System.out.println(wine[0]+" "+wine[1]+" "+wine[2]);
- if(wine[k]==d&&wine[j]==d){
- N=1000;
- return N;
- }
- //第一杯接满,第二杯倒空
- }else if(wine[j]+wine[i]==cup[i]){
- wine[i]=cup[i];
- wine[j]=0;
- System.out.println(wine[0]+" "+wine[1]+" "+wine[2]);
- }
- return N;
- }