5、N 个人进入会场开会(场内只有 N 个坐位), 本应对号入坐,可是N个人全都坐错了位置, 编程输出全都坐错了位置的所有可能坐法,并累计总数,N由键盘输入。

5、N 个人进入会场开会(场内只有 N 个坐位), 本应对号入坐,可是N个人全都坐错了位置, 编程输出全都坐错了位置的所有可能坐法,并累计总数,N由键盘输入。
输入:N
输出:所有可能的总数(提示:考虑下排列组合)

program site;
var     n, s : integer;
        a : array[1 .. 50] of integer;

procedure sit(i : integer);
var     ii, jj, kk : integer;
begin
        for ii := 1 to n do
        begin
                for jj := 1 to i do
                        if (a[jj] = ii) or (ii = i) then
                                break;
                if (a[jj] <> ii) and (ii <> i) then
                begin
                        a[i] := ii;
                        if i = n then
                        begin
                                s := s+1;
                                for kk := 1 to n do
                                        write(a[kk], ' ');
                                writeln;
                        end
                        else
                                sit(i+1);
                        a[i] := 0;
                end;
        end;
end;

begin
     readln(n);
     writeln;
     sit(1);
     writeln;
     writeln(s);
     readln;
end.
posted @ 2010-02-25 16:04  SmartIOI  阅读(389)  评论(0)    收藏  举报
本站采用CC授权如需转载、引用文章,请务必附上作者及来源处。 Creative Commons License