完美世界笔试第一题

443 阅读1分钟

有n个小朋友,每个小朋友有自己的座位。只有一个小朋友坐对位置,其他小朋友全部坐错座位的方式有多少种?

输入描述:

第一行,一个自然数,表示小朋友的个数

输出描述:

输出一个整数,表示符合条件的坐法有多少种

这个题根据全错位排列公式改一下就行了,全错位公式为:

Dn=(n-1)(Dn-1+Dn-2)

代码如下:

#include<iostream>
#include<vector>
#include<string>
#include<sstream>
#include<algorithm>
using namespace std;

int nums[101];//记录有多少种坐法

int func(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 << n * func(n-1) << endl;
	return 0;
}