关于分水的问题:
我的解题如下:包括乘水的容器,一共有3个容器,它们的分水是有规律的.
下面用A,B,C表示三容器
第一次分水,A->B.
第二次分水,B->C.
第三次分水,C->A.
第四次分水,B->C.
接着就是如此循环下去.又从第一次分水开始.直到判断跳出循环:
我的代码如下
#include<stdio.h>
#include<stdlib.h>
#define BDA 8
#define CDA 5
#define ADA 12
void main()
{
int i=0;
int a,b,c;
int atmp,btmp,ctmp;
int ac,bc,cc;
int fa,fb,fc,ka,kb,kc;
int mark=0;
a=ADA;
b=0;
c=0;
printf("a=%d b=%d c=%d\n",a,b,c);
while(1){
if(i==0){
atmp=a;
ac=BDA-b;/*需要放多少*/
if(a>BDA){
a=atmp-ac;
b=b+ac;
}
else
{a=0;
b=atmp;
}
printf("A have %d, B have %d, C have %d\n",ADA,BDA,CDA);
printf("%c->%c\n",'A','B');
}
if(i==1){
btmp=b;
bc=CDA-c;
b=btmp-bc;
c=c+bc;
printf("A have %d, B have %d, C have %d\n",ADA,BDA,CDA);
printf("%c->%c\n",'B','C');
if(mark==0){
fa=a;fb=b;fc=c;/*判断是否有解*/
mark=1;
}
if(mark==1){
ka=a;kb=b;kc=c;mark=0;
}
}
if(i==2){
ctmp=c;
cc=ADA-a;
a=a+ctmp;
if(a>ADA)
{a=ADA;c=ctmp-cc;
}
else
c=0;
printf("A have %d, B have %d, C have %d\n",ADA,BDA,CDA);
printf("%c->%c\n",'C','A');
}
if(i==3)
{
btmp=b;
if(b>CDA)
{b=b-CDA;c=CDA;}
else{
b=0;
c=btmp;}
printf("A have %d, B have %d, C have %d\n",ADA,BDA,CDA);
printf("%c->%c\n",'C','B');
}
if((a+b+c)==ADA)
printf("a=%d b=%d c=%d\n",a,b,c);
system("pause");
++i;
if((a==ADA/2)&&(b==ADA/2)&&(c==0))
break;
if(fa==ka&&fb==kb&&fc==kc){
printf("no answer\n");
break;}
if(i==4)
i=0;
}
}
[
本帖最后由 do8do8do8 于 2010-7-9 15:02 编辑 ]