题目描述
有n个小朋友,每个小朋友都有自己的座位。恰好每个小朋友都坐错座位的方式有多少种?
n <= 66
输入描述:
第1行,一个自然数,表示小朋友的个数。
输出描述:
输出一个整数,表示符合条件的坐法有多少种
很明显这是一个全错排列的问题,全错排列问题可以直接套用全错排列的公式来进行计算
#include<iostream>
using namespace std;
int nums[255];
int Fun(int n)
{
nums[2] = 1;
for(int i =3;i<=n;i++)
{
nums[i] =(i-1)*(nums[i-1]+nums[i-2]);
}
return nums[n];
}
int main()
{
int N;
cin>>N;
cout<<Fun(n);
}
PS:题目变化一下,如果恰好只有一个小朋友坐对,其余小朋友都做错,那么有多少种坐法?
其实这个也很简单,因为只有一个小朋友坐对,那么只需要求N-1个小朋友的全错排列。
又因为这个坐对的小朋友有N种坐法,所以最后的总的坐法就是 N*fun(N-1)种