- 注册时间
- 2007-5-19
- 最后登录
- 1970-1-1
|
本程序应实现:
输入三酒杯的容量,程序通过穷举法搜索将指定X升酒利用已有酒杯折腾分为两半。
在星星上编译通过,可是一运行星星就“过去了”(就想按RESET一样)
scanf.h:
int scanf()
{
int c,in=0;
while((c=GetWord(1))!=13)
{in=in*10+(c-48);
printf("%d",c-48);
}
return in;
} int scanf()
{
int c,in=0;
while((c=GetWord(1))!=13)
{in=in*10+(c-48);
printf("%d",c-48);
}
return in;
}
#include<scanf.h>
int n,x;
int A[15],B[15],C[15],Amax,Bmax,Cmax;
void A2B();void A2C();void B2A();void B2C();void C2A();void C2B();
void M2N(int Mmax,int Nmax,int M[],int N[])
{
if(M[n]==x){
}
else{
if(M[n]>Nmax-N[n])
{M[n+1]=M[n]-Nmax+N[n];
N[n+1]=M[n]-M[n+1]+N[n];
}
else
{M[n+1]=0;
N[n+1]=M[n]+N[n];
}
n++;
}
}
void A2B()
{
if(n<15)
{M2N(Amax,Bmax,A,B);
A2C();n--;
C2A();n--;
B2C();n--;
C2B();
}
}
void B2A()
{
if(n<15)
{M2N(Bmax,Amax,B,A);
A2C();n--;
C2A();n--;
B2C();n--;
C2B();
}
}
void A2C()
{if(n<15)
{M2N(Amax,Cmax,A,C);
A2B();n--;
B2A();n--;
B2C();n--;
C2B();
}}
void C2A()
{if(n<15)
{M2N(Cmax,Amax,C,A);
A2B();n--;
B2A();n--;
B2C();n--;
C2B();
}}
void B2C()
{if(n<15)
{M2N(Bmax,Cmax,B,C);
A2B();n--;
B2A();n--;
A2C();n--;
C2A();
}}
void C2B()
{if(n<15)
{M2N(Cmax,Bmax,C,B);
A2B();n--;
B2A();n--;
A2C();n--;
C2A();
}}
void move(){
n=1;A2B();
n=1;B2A();
n=1;A2C();
n=1;B2C();
}
void main(){
SetScreen(1);
printf(" 平均分酒\n");
printf("第1杯容量?");
Amax=scanf();
printf("\n第2杯容量?");
Bmax=scanf();
printf("\n第3杯容量?");
Cmax=scanf();
printf("\n第1杯有几升?");
A[0]=scanf();
printf("\n第2杯有几升?");
B[0]=scanf();
C[0]=0;
printf("\n");
x=(A[0]+B[0])/2;
move();
int t;
for(t=0,t<14,t++)
printf("%d ",A[t]);
printf("\n");
for(t=0,t<14,t++)
printf("%d ",B[t]);
printf("\n");
for(t=0,t<14,t++)
printf("%d ",C[t]);
getchar();
} |
|