题目描述:有N封信,要投入到N个不同的邮筒中,这N封信都投错的方案有多少种。
#include <cstdio>
#include <cstring>
void R(int k);
int H[50];//标记数组,标记该邮筒是否已经投过信。
int N, Ans = 0;
int main() {
memset(H, 0, sizeof(H));
scanf("%d", &N);
R(1);
printf("%d", Ans);
return 0;
}
void R(int k) {
if(k == N+1) {
Ans++;
} else {
for(int a=1; a<=N; a++) {
if(H[a]==0 && a!=k) {
H[a] = 1;
R(k+1);
H[a] = 0;
}
}
}
return;
}
p.s.:错排是有递推公式的,D(n)=(n-1)*[D(n-2)+D(n-1)]。传送门