说实话,挺喜欢编程的,但是这些算法对我来说理解的很困难,迷茫。。
最后再让不同的组合方式乘上错排的可能就可以得到总的答案了。
#include <iostream>
using namespace std;
int main()
{
int a, b, n; int t; long long int sum = 1;
cin >> n;
long long int c[21];
c[1] = 0;
c[2] = 1;
for (int i = 3; i <=20; i++)
{
c[i] = (i - 1)*(c[i - 1] + c[i - 2]);//这里是一个错排公式
}
c[1] = 1;
while (n--)
{
cin >> a >> b;
int t, q;
q=t = b;
while (t--)
{
sum = sum * a;
a--;
}
t = b;
while (t--)
{
sum = sum / q;
q--;
}
cout << sum * c[b] << endl;
sum = 1;//这段是自己写的C组合的代码,有点捞。
}
}