/*
感觉是目前做过的递归题中,最难的一道
原因在于,需要学错排公式,虽然看着别人的解释,也可以理解这个公式,但总觉得好像有些关键点似懂非懂
对于错排,解释得比较清楚的博客:
http://blog.youkuaiyun.com/yanghui07216/article/details/47018943
在这个博客里,a数组相当于全排列公式,也就是总共的情况
b数组是我们题目中描述的情况,所有人拿到的字条都和自己的名字不同,也即,b[i]表示有 i 个人的字条与其名字不匹配的情况
还有比较需要注意的是,要么数组就用double类型,否则,如果用 long long,需要将商进行强制类型转换
*/
#include <iostream>
#include <iomanip>
#define rep(i, k, n) for (int i = k; i < (n); i++)
using namespace std;
const int N = 25;
int t, n;
int main()
{
cin >> t;
double a[N] = { 0, 1, 2, 6 }, b[N] = {0, 0, 1, 2};
rep(i, 4, N)
{
a[i] = a[i - 1] * i;
b[i] = (i - 1) * ( b[i - 1] + b[i - 2] );
}
while (t--)
{
cin >> n;
cout << fixed << setprecision(2) << b[n] / a[n] * 100 << "%"<< endl;
// cout << fixed << setprecision(2) << double(b[n] * 100.0 ) / a[n] << "%"<< endl;
// 上面是 a 和 b 为 long long 型数组时的写法
}
return 0;
}