题目描述
Diana是一个悲惨的被WoW吞噬了几乎全部生命的玩家,在一次跟朋友组队打副本的时候,Diana碰到了麻烦,副本中的一个迷宫里有k扇一样的大门,每扇门背后都有一个同样的BOSS,现在Diana的团队必须同时进入这k扇大门里去打败其中的BOSS,Diana想知道她的团队可以有几种分组方式,使得保证每扇门中至少有一名自己的队友,同时,由于每个WoWer都是不同的,只有完全不同人员的分组的方案才能被认为是不同的。
输入
输入数据第一行有一个整数T,表示用T组测试数据。
对于每组测试数据,第一行会有两个正整数n,k(0< n, k < 100),n, k如上所述。
对于每组测试数据,第一行会有两个正整数n,k(0< n, k < 100),n, k如上所述。
输出
对于每组测试数据,输出占一行,首先应当输出一行”Case #k: ”,k表示第k组测试数据,
然后输出最多可能的分组个数。
然后输出最多可能的分组个数。
样例输入
22 14 2
样例输出
Case #1: 1Case #2: 7
提示
对于第二组测试数据,所有可能的情况应该是这样的
1. {A}, {B, C, D}
2. {B}, {A, C, D}
3. {C}, {A, B, D}
4. {D}, {A, B, C}
5. {A, B}, {C, D}
6. {A, C}, {B, D}
7. {A, D}, {B, C}
使用组合公式
#include <iostream>
#include <cstdio>
using namespace std;
int fun(int n){
int sum=1;
for(int i=1;i<=n;i++){
sum*=i;
}
return sum;
}
int main(){
int T,j=0;
scanf("%d", &T);
int m,n;
while(T--){
scanf("%d%d", &m, &n);
if(n==1)
printf("Case #%d: 1\n",++j);
else
printf("Case #%d: %d\n",++j, (fun(m)/fun(n))/fun(m-n)+1);
}
}