信封问题
题目描述
某人写了 n 封信和 n 个信封,如果所有的信都装错了信封。求所有信都装错信封共有多少种不同情况。
输入格式
一个信封数 n,保证 n≤20。
输出格式
一个整数,代表有多少种情况。
样例 #1
样例输入 #1
2
样例输出 #1
1
样例 #2
样例输入 #2
3
样例输出 #2
2
提示
对于 100% 的数据,1≤n≤20。
#include <bits/stdc++.h>
using namespace std;
int a[25];
int main(){
int n, ans = 0;
cin >> n;
for (int i = 1;i <= n;i++){
a[i] = i;
}
do{
int f = 0;
for (int i = 1;i <= n;i++){
if (a[i] == i){
f = 1;
break;
}
}
if (f == 0){
ans++;
}
}while (next_permutation(a + 1, a + 1 + n));
cout << ans << endl;
return 0;
}