正文

Zju 1619 Present2006-08-08 22:40:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/cruxd/17414.html

分享到:

2009974 2006-08-08 22:21:50 Accepted 1619 C++ 00:00.02 392K St.Crux

首先要知道什么是错排

清楚了以后这个题就是弱题。即求:

C(n,m)——n个数里取m个的组合数 × 剩下的(n-m)个数的错排数

注意n==m的情况

#include <cstdio>

int m, n;
double a[101];

int main()
{
 //freopen("in.txt", "r", stdin);
 a[1] = 0, a[2] = 1;
 int i;
 for(i = 3; i < 101; i ++)
 {
  a[i] = (i - 1) * (a[i - 1] + a[i - 2]);
 }
 while(scanf("%d %d", &n, &m) != EOF)
 {
  double pb = 1;
  if(n == m)
  {
   //pb *= a[n];
   for(i = 1; i <= n; i ++)
   {
    pb /= double(i);
   }
  }
  else
  {
   pb *= a[n - m];
   for(i = 1; i <= m; i ++)
   {
    pb /= double(i);
   }
   for(i = 1; i <= n - m; i ++)
   {
    pb /= double(i);
   }
  }
  printf("%0.8f\n", pb);
 }
 return 0;
}

 

阅读(3450) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册