灯火阑珊201 发表于 2022-11-7 17:22:17

组合数问题,要求使用数组

从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:36:39

本帖最后由 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:32:03

本帖最后由 jhq999 于 2022-11-7 18:38 编辑

排列组合?
c(n,m)*p(m)
=((n!/(n-m)!)/m!)*m!=n*(n-1)*(n-2)*....*(n-m+1)
用数组不会还有精度乘把?

桃花飞舞 发表于 2022-11-7 23:36:20

厉害了,我完全不会,
页: [1]
查看完整版本: 组合数问题,要求使用数组