不是VIP会员,不能显示答案

题目解答

题目:
【世博会攻略-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. 
考点:
分析:
解答:
评论:
老师: