HDU

来源:互联网 发布:最简单图片轮播js代码 编辑:程序博客网 时间:2024/06/06 14:27
/*  感觉是目前做过的递归题中,最难的一道    原因在于,需要学错排公式,虽然看着别人的解释,也可以理解这个公式,但总觉得好像有些关键点似懂非懂    对于错排,解释得比较清楚的博客:  http://blog.csdn.net/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;}


原创粉丝点击