排队接水Pascal,最好冒泡排序
答案:1 悬赏:0 手机版
解决时间 2021-02-15 13:27
- 提问者网友:你挡着我发光了
- 2021-02-15 06:47
排队接水Pascal,最好冒泡排序
最佳答案
- 五星知识达人网友:長槍戰八方
- 2021-02-15 08:09
var
n,i:integer;
t:array[1..100] of integer;
b:array[1..100] of boolean; {状态数组}
f:text;
s:longint;
st:string;
procedure next(m:integer;ss:longint;sst:string);
var
k:integer;
s0:string;
begin
if m=n then begin
if ss s:=ss;
st:=sst;
for k:=1 to n do
if not b[k] then begin
str(k:0,s0);
st:=st+' '+s0;
end;
end;
end
else for k:=1 to n do if not b[k] then
begin
b[k]:=true;
str(k:0,s0);
next(m+1,ss+t[k]*(n-m),sst+' '+s0);
{第一个人接水,后面有9人等待,......}
b[k]:=false;
end;
end;
begin
assign(f,'排队接水.in'); reset(f);
readln(f,n);
for i:=1 to n do read(f,t[i]);
close(f);
for i:=1 to n do b[i]:=false;
s:=9999999;
st:='';
next(1,0,'');
writeln(st);
writeln(s/n:10:2);
end.
{这是穷举所有可能的总体最优递归解法!
从计算结果看,将接水时间从小到大排序,
按接水时间短的优先打水,最后所得等待时间最短}
n,i:integer;
t:array[1..100] of integer;
b:array[1..100] of boolean; {状态数组}
f:text;
s:longint;
st:string;
procedure next(m:integer;ss:longint;sst:string);
var
k:integer;
s0:string;
begin
if m=n then begin
if ss
st:=sst;
for k:=1 to n do
if not b[k] then begin
str(k:0,s0);
st:=st+' '+s0;
end;
end;
end
else for k:=1 to n do if not b[k] then
begin
b[k]:=true;
str(k:0,s0);
next(m+1,ss+t[k]*(n-m),sst+' '+s0);
{第一个人接水,后面有9人等待,......}
b[k]:=false;
end;
end;
begin
assign(f,'排队接水.in'); reset(f);
readln(f,n);
for i:=1 to n do read(f,t[i]);
close(f);
for i:=1 to n do b[i]:=false;
s:=9999999;
st:='';
next(1,0,'');
writeln(st);
writeln(s/n:10:2);
end.
{这是穷举所有可能的总体最优递归解法!
从计算结果看,将接水时间从小到大排序,
按接水时间短的优先打水,最后所得等待时间最短}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯