现对于上一道”神、上帝以及老天爷” 只求M个数的错排数 不同的本题 是求N个数中M的错排数
先从N个数中 取M个数有CnM种取法 再乘上M的错排数就是答案 错排数的求法参考上一篇文章
其中组合公式如下
#include<iostream> #include<string> #include<iomanip> using namespace std; int main() { long long a[21]={0, 0, 1}; // a[i]表示i个数的错排种类 long long b[21]={1, 1, 2}; // b[i]表示i的阶乘 for(int i=3; i<21; i++) a[i]=(i-1)*(a[i-1]+a[i-2]); for(int i=3; i<21; i++) b[i]=b[i-1]*i; int C; cin>>C; while(C--) { int N, M; cin>>N>>M; long long CnM=b[N]/b[N-M]/b[M];// N 个数的M组合数 cout<<CnM*a[M]<<endl; } return 0; }
时间: 2024-11-02 14:53:00