这个题,要用到错排递推公式,还有全排。
还有,最近比赛啥的老是不爽,结果通过这个题竟然发现了自己的毛病,printf(“%lf”)输出double型怎么弄也是输出0.00,调试了半天,还以为C语言编译器犯病了。后来才知道输出时应该用f,无语了。发现自己太水了。。。好好努力吧。。
#include <iostream>
#include <cstdio>
using namespace std;
long long int cuo[21];
long long int all[21];
void init()
{
all[1] = 1;
for(int i = 2; i < 21; i++)
all[i] = all[i-1] * i;
cuo[1] = 0; cuo[2] = 1;
for(int i = 3; i < 21; i++)
cuo[i] = (i-1)*(cuo[i-1]+cuo[i-2]);
}
int main()
{
init();
int T;
cin >>T;
while(T--){
int x; cin >> x;
double res = 100.0 * cuo[x] / all[x];
printf("%.2f%%\n", res);
}
return 0;
}