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;
}
评论