信封问题。某人写了N封信和N个信封,如果所有的信都装错了信封。求所有的信都装错信封共有多少钟不同情况
求高手回答 n=1~10的答案
信封问题。某人写了N封信和N个信封,如果所有的信都装错了信封。求所有的信都装错信封共有多少钟不同情况
求高手回答 n=1~10的答案
var
n,ans:integer;
a:array[1..10]of integer;
yes:array[1..10]of boolean;
procedure dfs(deep:integer);
var
i,j:integer;
begin
if deep>n then ans:=ans+1
else
for i:=1 to n do
if (yes[i])and(i<>deep) then
begin
yes[i]:=false;
a[deep]:=i;
dfs(deep+1);
yes[i]:=true;
end;
end;
begin
fillchar(yes,sizeof(yes),true);
readln(n);
dfs(1);
writeln(ans);
readln
end.
这个是用深搜,每次枚举一种情况
1-10分别是0,1,2,9,44,265,1854,14833,133496,1334961
友情团队 编程之道 提供的公式可以用的,不过考场上如果想不到公式,就要用深搜做了