组合数问题,要求使用数组
从n(n>0)个不同元素中,任取m(0≤m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做n个不同元素中取出m个元素的组合数(combinatorial number)。裁判测试程序样例:
#include <stdio.h>
int fcn(int n, int m);
int main()
{
int n, m;
scanf("%d%d", &n, &m);
printf("%d\n", fcn(n, m));
return 0;
}
/* 你写的答案将被嵌在这里 */
函数接口定义:
int fcn(int n, int m);
这个题用常规的long long会超时,应该是要用数组来存储组合数,不知道咋写,求大佬帮助!!! 本帖最后由 jackz007 于 2022-11-7 17:53 编辑
从题面看,这是一道组合概念题,这个概念在数十年前上高中的时候学过,计算公式现在还依稀记得。
#include <stdio.h>
int fcn(int n , int m)
{
int a , b , d , i ;
for(a = 1 , d = n , i = 0 ; i < m ; i ++ , d --) a *= d ;
for(b = 1 , i = 0 ; i < m ; i ++) b *= i + 1 ;
return a / b ;
}
int main(void)
{
int n , m ;
scanf("%d%d", & n , & m) ;
printf("%d\n" , fcn(n , m)) ;
return 0 ;
} 本帖最后由 jhq999 于 2022-11-7 18:38 编辑
排列组合?
c(n,m)*p(m)
=((n!/(n-m)!)/m!)*m!=n*(n-1)*(n-2)*....*(n-m+1)
用数组不会还有精度乘把? 厉害了,我完全不会,
页:
[1]