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

题目解答

题目:
[圣诞礼物](3+2+2+3+2=12分)
圣诞节到了,圣诞老人打算把一批圣诞礼物装入各种不同颜色的口袋中,然后分发给 小朋友们。现在圣诞老人手中有5个不同礼物和5个不同口袋,圣诞老人的计划是这样的:
(1)先给每个礼物编号,编号分别是1、2、3、4、5;再给5个口袋编号,分别用a[1]、a[2]、a[3]、a[4]、a[5]来表示,其中a[1]的值表示I号口袋中装的礼物的编号。比如,a[3]=5,
表示3号口袋中装的是编号为5的礼物。
(2)任何一个礼物可以装入任何一个口袋中,但每个口袋中有且仅有一个礼物。也就是说,5个礼物刚好装入5个不同的口袋中。
圣诞老人想知道的是这样的礼物装入口袋的方法一?共有多少种,分别怎么装?他想让你编写一个程序来解决这个问题。而且,他怕你不理解他的含义,举了—个例子,假如行 3个不同的礼物和口袋,那么你的程序应该能输出以下结果:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
S=6
上述输出结果中,最后一行表示装袋方法的种数(这里是6种),前面6行是各种不同的装袋方法。比如,第一行表示1、2、3号口袋分别装的礼物编号是1、2、3:而第3行表示的是1、2、3号口袋分别装的礼物编号是2、1、3。
请你完成下列程序:
program test5;
 var
  a:array[1..5] of integer;
  i1,i2,i3,i4,i5,j1,j2,j3,j4,j5,s:integer;
  function f(x,y:integer):Boolean;
   var
    k:integer;
   begin
    f:=true;
    for k:=1 to x do if  a[k]=y then f:=false;
   end;
procedure print;
   var
    i:integer;
   Begin
    For i:=1 to 5 do write(a[i]:3);writeln;
   End;
Begin
  S:= 0 ;
  For  i1:=1 to 5 do
    Begin
     j1:=1;
      a[j1]:=i1 a[j1]:=i1___;
     for i2:=1 to 5 do
        if f(j1,i2) then 
        begin
          j2:=2;a[j2]:=i2;
           for i3:=1 to 5 do
             if f(j2,i3)then
              begin
               j3:=3;a[j3]:=i3;
               for i4:=1 to 5 do
                 if f(j3,i4) then 
                 begin
                 j4:=4;a[j4]:=i4;
                    for i5:=1 to 5 do
                     if f(j4,i5)then 
begin 
j5:=5;
a[j5]:=i5;
print;
 inc(s) ;
end;
end;
                 end;
end;
end;
writeln(‘s=’, s );
end.
考点:
分析:
解答:
评论:
老师: