@sensitive-cs
2016-10-06T12:47:01.000000Z
字数 619
阅读 808
从n个男生中选至少4人,从m个女生中选至少1人,满足m和n的和为t,求多少种选法。
组合的简单问题。
满足上述条件的情况下,对每一种不同的情况,男生的组合数与女生的组合数相乘,最后相加。
参考了晴转多云同学的代码后,暴力算阶乘的绝对会溢出,所以算组合数的时候是有技巧的,具体技巧参考代码中的计算组合数的函数。当然long long是必须的。
#include <stdio.h>
long long bine(int max,int min);
int main()
{
long long n,m,t;
while (scanf("%I64d%I64d%I64d",&n,&m,&t) != EOF)
{
long long i,j;
long long cal = 0;
for (i = 4;i <= n;i++)
for (j = 1;j <= m;j++)
{
if ((i + j) == t)
{
long long _x = 0,_y = 0;
if (i == n)
_x = 1;
else
_x = bine(n,i);
if (j == m)
_y = 1;
else
_y = bine(m,j);
cal += (_x * _y);
}
}
printf("%I64d\n",cal);
}
return 0;
}
long long bine(int max,int min)
{
int i,j;
long long temp = 1;
for (i = max,j = 1;j <= min;j++,i--)
temp = temp * i / j;
return temp;
}