level 5
nice传说yea
楼主
3杯子 从大到小容量分别是3 5 10 规则:1、三个杯子相互倒水且不准把水倒往三个杯子之外,2、每次倒水必须是把目标杯装满或是倒出水的杯子已空才能停止。
要求:给出各杯子的容量,请用最少的倒水次数,从C杯中倒出后,剩余d升水 输入D 输出次数
标准答案 @fp4869 我还记得你在暑假的那个培训班里
是大神 @烈火电脑工作室
希望帮忙修改代码并且给出每一步每一句语句的思路 谢谢!
d=5 步骤=9
d=6 步骤=3
自行编写代码:
var
data:array[1..500,1..4] of longint;
bz:array[0..3,0..5,0..10] of boolean;
max:array[1..3] of longint=(3,5,10);
Shou,Wei,sum,i,j,x:longint;
begin
readln(x);
shou:=1;
wei:=2;
data[1,3]:=10; // 0 0 10
bz[0,0,10]:=true;
while shou<wei do
begin
for i:=1 to 3 do
for j:=1 to 3 do
begin
if i<>j then
begin
data[wei]:=data[shou]; //继承父节点
if (max[j]-data[shou,j])>=(data[shou,i]) then //如倒出的杯子能倒空
begin
data[wei,j]:=data[wei,j]+data[wei,i]; //接受杯子加上倒出杯子
data[wei,i]:=0; //倒出杯子清空
end
else //否则倒出的杯子不空
begin
data[wei,i]:=data[wei,i]-(max[j]-data[wei,j]);//倒出杯子减去能倒出的最大数量
data[wei,j]:=max[j]; //接收杯子满
end;
//判断是否合法
if bz[data[wei,1],data[wei,2],data[wei,3]]=false then
begin
bz[data[wei,1],data[wei,2],data[wei,3]]:=true; //标记
data[wei,4]:=data[shou,4]+1; //步骤
inc(wei);//父节点前推
end;
if data[wei-1,3]=x then //结束条件
begin
writeln(data[i,4]);
halt;
end;
end;
end;
inc(shou);
end;
end.
2014年10月20日 10点10分
1
要求:给出各杯子的容量,请用最少的倒水次数,从C杯中倒出后,剩余d升水 输入D 输出次数
标准答案 @fp4869 我还记得你在暑假的那个培训班里
希望帮忙修改代码并且给出每一步每一句语句的思路 谢谢!
d=5 步骤=9
d=6 步骤=3
自行编写代码:
var
data:array[1..500,1..4] of longint;
bz:array[0..3,0..5,0..10] of boolean;
max:array[1..3] of longint=(3,5,10);
Shou,Wei,sum,i,j,x:longint;
begin
readln(x);
shou:=1;
wei:=2;
data[1,3]:=10; // 0 0 10
bz[0,0,10]:=true;
while shou<wei do
begin
for i:=1 to 3 do
for j:=1 to 3 do
begin
if i<>j then
begin
data[wei]:=data[shou]; //继承父节点
if (max[j]-data[shou,j])>=(data[shou,i]) then //如倒出的杯子能倒空
begin
data[wei,j]:=data[wei,j]+data[wei,i]; //接受杯子加上倒出杯子
data[wei,i]:=0; //倒出杯子清空
end
else //否则倒出的杯子不空
begin
data[wei,i]:=data[wei,i]-(max[j]-data[wei,j]);//倒出杯子减去能倒出的最大数量
data[wei,j]:=max[j]; //接收杯子满
end;
//判断是否合法
if bz[data[wei,1],data[wei,2],data[wei,3]]=false then
begin
bz[data[wei,1],data[wei,2],data[wei,3]]:=true; //标记
data[wei,4]:=data[shou,4]+1; //步骤
inc(wei);//父节点前推
end;
if data[wei-1,3]=x then //结束条件
begin
writeln(data[i,4]);
halt;
end;
end;
end;
inc(shou);
end;
end.