pascal递归
信封问题。某人写了n封信和n个信封,如果所有的信都装错了信封。求所有信都装错信封共有多少种不同情况。
求高手火速回答。
pascal递归
信封问题。某人写了n封信和n个信封,如果所有的信都装错了信封。求所有信都装错信封共有多少种不同情况。
求高手火速回答。
这是程序
var n,ans:longint; 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