本文目录一览

1,有12品脱啤酒一瓶从中倒出6品脱但没有6品脱的容器只有一个8

把8品脱的容器用啤酒倒满,再把其中的啤酒倒入5品脱的容器倒满,剩下的为3品脱,倒入另一容器,再向8品脱的容器中倒满啤酒,然后把8品脱的拼接倒入5品脱的容器中倒满,剩下的啤酒为3品脱,并倒入上次剩下的啤酒倒入的容器中,即另一容器中的啤酒为6品脱

有12品脱啤酒一瓶从中倒出6品脱但没有6品脱的容器只有一个8

2,某人有12品脱啤酒一瓶品脱是英容量单位1品脱0568升想从

1,将8容器倒满,12容器中还剩4 2,将8 的酒倒满5 的容器,8容器还剩3 3,将5容器中的酒全部到进12容器,此时12容器里面为4+5=9 4,将8中的剩下的3酒倒入5容器 5,将12容器中的9酒倒满8容器,此时12里面剩下1品脱 6,将8中的酒倒满5容器(第四部完时5容器里是3品脱酒),此时8容器剩下的酒正好就是6品脱了!!

某人有12品脱啤酒一瓶品脱是英容量单位1品脱0568升想从

3,如何巧分啤酒

先将12品脱啤酒倒入8品脱的容器中,那么瓶中还有4品脱,将8品脱的容器的啤酒倒入5品脱的容器中,那么8品脱的容器还有3品脱啤酒。把5品脱啤酒倒回瓶中,把8品脱容器的啤酒倒入5品脱容器中。现在5品脱的容器有3品脱是啤酒,瓶中有9品脱。把9品脱全部倒入8品脱的容器中,把5品脱容器的3品脱啤酒倒入瓶中。这样瓶中有3品脱啤酒,8品脱的容器有8品脱啤酒,将8品脱容器的啤酒倒入5品脱的容器中,那么8品脱容器有3品脱,把瓶中再倒回去8品脱中,此时8品脱容器就有6品脱的啤酒啦。其实公式是5+9-8

如何巧分啤酒

4,Poison在青年时代研究过一个有趣的数学问题某人有12 品

12倒入88倒入512中剩4,8中剩3,5中有55倒入128倒入512中有9,8空,5中有312倒入812中有1,8中有8,5中有38倒入5,5倒入1212和8中各有6
先将12品→8品→5品,得出12品有4品,8品有3品,5品有5品。第二将5品容器加入12品啤酒瓶共有9品。第三将8品容器有(3品)加入空5品容器(变成3品)第四将12品啤酒瓶(有9品)加入8品容器加满,12品啤酒瓶剩1品,第五将5品的容器加满(5品)最后加入12品的啤酒瓶(剩1品)就可以了

5,某人有12品脱啤酒一瓶

 第一种解法: 12 12 4 4 9 9 1 1 6 8 0 8 3 3 0 8 6 6 5 0 0 5 0 3 3 5 0     第二种解法: 12 12 4 0 8 8 3 3 11 11 6 6 8 0 8 8 0 4 4 8 0 1 1 6 5 0 0 4 4 0 5 1 1 0 5 0  
真的假的!怎么可能啊!
八品脱少了二品脱就是六品脱

6,c语言程序设计分酒问题某人有12品脱的酒一瓶想从中倒出6品脱

#include <iostream>using namespace std;int V[3]=int src[6] =int dest[6]=int record[100][3];int rec_index=0;void Pour(int state[],int a,int b) int r=V[b]-state[b]; if(state[a]<r) else }void Output() printf(" A B C\n"); for(int i=0;i<rec_index;++i) printf("%4d %4d %4d\n",record[i][0],record[i][1],record[i][2]); printf("\n\n");}void Record(int state[]) record[rec_index][0]=state[0]; record[rec_index][1]=state[1]; record[rec_index][2]=state[2]; ++rec_index;}bool Exist(int state[]) for(int i=0;i<rec_index;++i) if (state[0]==record[i][0] && state[1]==record[i][1] && state[2]==record[i][2]) return true; return false;}void Solve(int state[]) int a=state[0],b=state[1],c=state[2]; Record(state); if(a==6 && b==6 && c==0) for(int i=0;i<6;++i) if(state[src[i]]==0) continue; Pour(state,src[i],dest[i]); if(!Exist(state)) Solve(state); --rec_index; } state[0]=a;state[1]=b;state[2]=c; }}int main() int init[3]= Solve(init); return 0;}
用状态空间描述:假设一个状态 (x, y, z),代表当前三个容器(酒瓶、8品脱容器和5品脱容器)那么明显有 x + y + z = 12目标状态是 x = 6 或 y = 6而出时状态为 (12, 0, 0)每次,都可以考虑从 x 倒向 y,从 y 倒向 x,等,共六种转移操作。然后在这个状态空间中进行广度优先搜索即可得到解。。加到 150 分帮你写完所有代码。。
给,详细的算法分析,以及源代码和注释:问题分析与算法设计 将12品脱酒 8品脱和5品脱的空瓶平分,可以抽象为解不定方程: 8x-5y=6 其意义是:从12品脱的瓶中向8品脱的瓶中倒x次,并且将5品脱瓶中的酒向12品脱的瓶中倒y次,最后在12品脱的瓶中剩余6品脱的酒。 用a,b,c代表12品脱、8品脱和5品脱的瓶子,求出不定方程的整数解,按照不定方程的意义则倒法为: a -> b -> c ->a x y 倒酒的规则如下: 1) 按a -> b -> c ->a的顺序; 2) b倒空后才能从a中取 3) c装满后才能向a中倒 按以上规则可以编写出程序如下:*程序与程序注释#include<stdio.h>void getti(int a,int y,int z);int i; /*最后需要分出的重量*/void main() int a,y,z; printf("input Full a,Empty b,c,Get i:"); /*a 满瓶的容量 y:第一个空瓶的容量 z:第二个空瓶的容量*/ scanf("%d,%d,%d,%d",&a,&y,&z,&i); getti(a,y,z); /*按a -> y -> z -> a的操作步骤*/ getti(a,z,y); /*按a -> z -> y -> a的步骤*/}void getti(int a,int y,int z) /*a:满瓶的容量 y:第一个空瓶的容量 z:第二个空瓶的容量*/ int b=0,c=0; /* b:第一瓶实际的重量 c:第二瓶实际的重量*/ printf(" a%d b%d c%d\n %4d%4d%4d\n",a,y,z,a,b,c); while(a!=i||b!=i&&c!=i) /*当满瓶!=i或另两瓶都!=i*/ if(!b) else if(c==z) else if(b>z-c) /*如果第一瓶的重量>第二瓶的剩余空间*/ else printf(" %4d %4d %4d\n",a,b,c); }}

文章TAG:品脱  啤酒  12  从中  12品脱啤酒  
下一篇