1. 【世博会攻略-1】(2+2+2+2+2=10分)
味子很想去游览世博会,可是听说世博会很多展馆需要排队很长时间,她又犹豫了。聪明的她就想用程序来帮助她选择展馆。现在味子已知n个展馆分别需要的排队时间她想从中选出排队时间最少的10个展馆作为候选对象,如果她去世博会,她就会选择这些展馆去参观。
下面就是味子用来选择这10个展馆的程序,请完善该程序。
输入数据第一行只有一个整数n(不超过300),表示总的展馆数量。第二行一共包含n个用空格分隔的整数,依次表示每个展馆可能需要的排队时间,第i个数值表示编号为i的展馆所需要的排队时间。
输出只有一行,包含10个用空格分隔的整数,表示排队时间最少的10个展馆的编号。
输入样例:
15
5 3 9 10 2 3 4 1 6 7 8 11 15 2 12
输出样例
8 5 14 2 6 7 1 9 10 11
program test_1005
var
n,i,j,k,t:integer;
a:array[1..300] of integer;
b:array[1..300] of integer;
begin
readln( n );
for i:=1 to n do begin read(a[i]);b[i]:=i;end;
for i:=1 to 10 do
begin
k:=i ;
For j:=i+1 to n do if a[j]<a[k] then k:=j ;
if k<>i then
begin
t:=b[i];b[i]:=b[k];b[k]:=t;
t:=a[i];a[i]:=a[k]; a[k]:=t ;
end;
end;
for i:=1 to 10 do write( b[i],’ ’);
end.
2. 【世博会攻略-2】(3+3+3+3+3+3=18分)
世博会中,有些展馆虽然不必排队(或者排队时间很短),但没什么可看的;有些展馆虽然排队等候时间很长,但太值得看了(比如,我们的中国馆)。
味子是个喜欢保质保量的人,她现在有12 小时的游览时间,她希望在这12 小时中游览4 个展馆(为 方便,我们不计味子在各展馆之间走路和游览的时间),但这 个展馆不能是没什么可看的。于是,她收集了每个展馆需要排队的时间,为每个展馆设定了可看指数(指数越高越值得看)。现在她想统计一 下12 小时内分别可以游览哪4 个展馆,这4 个展馆必须满足下列条件:
(1) 4 个展馆的排队时间总和不能超过12小时
(2) 这4个展馆的可看指数总和不能小于10。
(3) 任何一个展馆的可看指数都必须不小于2。
满足上述条件的每4 个展馆称为一组(展馆编号相同但顺序不同的情况视为相同。比如,“1、3、5、 6”和:“5、6、1、3”我们认为是同一种方案),味子用下列程序用来统计满足条件的组数,请完善程。
输入数据第一行只有一个整数n(n<=300),表示总的展馆数量。第二行有n个用空格分隔的整数, 依次表示每个展馆的排队时间。第三行有n 个用空格分隔的整数,表示每个展馆的可看指数。
输出数据第一行只有一个整数ans,表示满足条件的方案总数。接下来共有ans 行,每行表示满足条 件的一组展馆的编号。
输入样例 1:
12
6 4 2 5 1 0 3 2 4 4 3 5
5 2 1 4 1 1 2 2 3 4 1 2
输出样例1:
0 //表示没有任何4个展馆满足条件
输入样例2:
8
4 3 2 3 1 0 3 2
5 2 1 4 1 1 2 2
输出样例2:
4
1 2 4 8
1 2 7 8
1 4 7 8
2 4 7 8
//编号为“1、2、4、8”等4组展馆满足条件
program test_1006;
var
n,i,j,ans:integer;
a,p:array[1..300] of integer;
f:array[1..100,1..4] of integer;
procedure init;
var i,j:integer;
begin
readln(n);
for i:=1 to n do read(a[i]);
readln;
for i:=1 to n do read( p[i] );
for i:=1 to 100 do for j:=1 to 4 do f[i,j]:=0;
ans:=0;
end;
procedure work;
var
i,j,x1,x2,x3,x4:integer;
begin
for x1:=1 to n-3 do
if p[x1]>=2 then begin
for x2:=x1+1 to n-2 do
if p[x2]>=2 then begin
for x3:=x2+1 to n-1 do
if p[x3]>=2 then begin
for x4:=x3+1 to n do
if (p[x4]>=2) and (a[x1]+a[x2]+a[x3]+a[x4]<=12) and ( p[x1]+p[x2]+p[x3]+p[x4]>=10 ) then
begin
inc(ans) ;f[ans,1]:=x1;f[ans,2]:=x2;f[ans,3]:=x3;f[ans,4]:=x4;
end;
end;
end;
end;
end;
procedure out;
var
i,j:integer;
begin
writeln(ans);
for i:=1 to ans do
begin
for j:=1 to 4 do write( f[i,j] ,’ ’);
writeln;
end;
end;
begin {main}
init;
work ;
out;
end.