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

评论