int i
void getti(int a,int y,int z)
int main()
{
int a,y,z
printf("input full a, empty b,c,get i:")
scanf("%d%d%d%d"祥卜,&a,&y,&z,&i)
getti(a,y,z)
getti(a,y,z)
return 0
}
void getti(int a,int y,int z)
{
int 哗宴银b=0,c=0
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)) {
if(!b)
{ a-=yb=y }
else if(c==z)
{ a+=zc=0 }
else if(b>z-c)
{
b-=(z-c)c=z
}
else { c+=bb=0 }
printf("%4d%4d%4d\n",a,b,c)
}
}
到油问题解题报告[问题描述]:
2、分油问题(work2.pas)
[问题描述]
设有大小不等的3个无刻度的油桶,分别能够存满,X,Y,Z公升油(例如X=80,Y=50,Z=30)。初始时,第一个油桶盛满油,第二、三个油桶为空。编程寻找一种最少步骤的分油方式,在某一个油桶上分出targ升油(例如targ=40)。若找到解,则将分油方法打印出来;否则打印信息“UNABLE”等字样,表示问题无解。
输入输出:
输入文件(work2.in)一行4个整数,依次表示缺乎X,Y,Z,targ,每个数之间用一个空仔凳格隔开;
输出文件(work2.out)表示解的情况伏戚悉,如果无解输出UNABLE,如果有解,则输出分油方法(每一步三个油桶的状态),如果解不唯一也只有输出任一个解,如:
输入:80 50 30 40
则输出:
80 0 0
30 50 0
30 20 30
60 20 0
60 0 20
10 50 20
10 40 30
[基本思想]:
用一个二维数组来存储每一次产生的状态,出现正确答案或所有情况都找完时停止,每个状态分x,y,z和前导值,用以输出使用。
[数据结构]:
program work2
var a:array[1..30,1..4]of integer
b:array[1..3]of integer{记录原x,y,z值}
t,h,r,f:integer
[程序];
procedure dao(x,y,z:integer){到油过程}
var i:integer
begin
r:=r+1
if a[h,x]+a[h,y]>b[y] then begin a[r,x]:=a[h,x]+a[h,y]-b[y]a[r,y]:=b[y]a[r,z]:=a[h,z]end
else begin a[r,y]:=a[h,x]+a[h,y]a[r,x]:=0a[r,z]:=a[h,z]end
a[r,4]:=h
for i:=1 to r-1 do if (a[r,x]=a[i,x])and(a[r,y]=a[i,y]) then begin a[r,x]:=0a[r,y]:=0a[r,z]:=0a[r,4]:=0r:=r-1exitend{是否有重复};
if (a[r,x]=t)or(a[r,y]=t) then f:=1
end
procedure print(r:integer)
begin
if a[r,4]<>0 then print(a[r,4])
writeln(a[r,1],' ',a[r,2],' ',a[r,3])
end
begin
assign(input,'work2.in')
reset(input)
assign(output,'work2.out')
rewrite(output)
readln(b[1],b[2],b[3],t)
a[1,1]:=b[1]
a[1,2]:=0
a[1,3]:=0
a[1,4]:=0
h:=1r:=1f:=0
while (f=0)and(h<=r) do
begin
if a[h,1]>0 then dao(1,2,3)
if (f=0)and(a[h,1]>0) then dao(1,3,2)
if (f=0)and(a[h,2]>0) then dao(2,1,3)
if (f=0)and(a[h,2]>0) then dao(2,3,1)
if (f=0)and(a[h,3]>0) then dao(3,1,2)
if (f=0)and(a[h,3]>0) then dao(3,2,1){到油方案}
h:=h+1
end
if h>r then writeln('no answer',h,r)
else print(r){打印}
close(input)
close(output)
end.
[问题总结]:
本题并不难,只要熟悉宽搜的基本思路,就一定能解开。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)