求n个元素的任意组合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求n个元素的任意组合相关的知识,希望对你有一定的参考价值。

比如A,B,C三个元素,可以做如下组合
A
B
C
AB
AC
BC
ABC
一共七个结果
4个元素有14中结果,这个用什么数列公式?

参考技术A 4个元素有15种结果:
A

B
C
D
AB
AC
AD
BC
BD
CD
ABC
ABD
ACD
BCD
ABCD
用这个公式:2^n-1
2个元素有2²-1=3种结果;
3个元素有2³-1=7种结果;
4个元素有2⁴-1=15种结果;

......
参考技术B 组合(combination)是一个数学名词。一般地,从n个不同的元素中,任取m(m≤n)个元素为一组,叫作从n个不同元素中取出m个元素的一个组合。我们把有关求组合的个数的问题叫作组合问题。
组合(combination),数学的重要概念之一。从n个不同元素中每次取出m个不同元素(0≤m≤n),不管其顺序合成一组,称为从n个元素中不重复地选取m个元素的一个组合。所有这样的组合的总数称为组合数。
如果从n个不同元素中一个元素也不取,则只有一种,就是不取的那一种方法,即组合数为1。
希望我能帮助你解疑释惑。

[PTA]实验2-4-7 求组合数

本题要求编写程序,根据公式算出从n个不同元素中取出m个元素(m≤n)的组合数。

在这里插入图片描述

建议定义和调用函数fact(n)计算n!,其中n的类型是int,函数类型是double。

输入格式:

输入在一行中给出两个正整数m和n(m≤n),以空格分隔。

输出格式:

按照格式“result = 组合数计算结果”输出。题目保证结果在double类型范围内。

输入样例:

2 7

输出样例:

result = 21
  • 提交结果:

在这里插入图片描述

  • 源码:
#include<stdio.h>
double fact(int n);//求n!
int main(void)
{
    int m, n;
    int result;

    scanf("%d%d", &m, &n);

    if (m == n)
    {
        result = 1;
    }
    else
    {
        result = fact(n) / (fact(m) * fact(n - m));
    }

    printf("result = %d\\n", result);

    return 0;
}

// 递归方法求得n的阶乘
double fact(int n)
{
    if (n == 1)
    {
        return 1;
    }
    else
    {
        return n * fact(n - 1);
    }
}

以上是关于求n个元素的任意组合的主要内容,如果未能解决你的问题,请参考以下文章

知识点整理--组合数学

求一个PHP计算数组内元素的不同组合,请看案例

在n个任意不相同的数中,输出r个数的组合,并且n和r由键盘输入。

将三个球随机的放入4个盒子中去,求任意三个盒子中各有一个球的概率!

hdu5795 A Simple Nim 求nim求法,打表找sg值规律 给定n堆石子,每堆有若干石子,两个人轮流操作,每次操作可以选择任意一堆取走任意个石子(不可以为空) 或者选择一堆,把它分成

在O(n)时间复杂度内求无序数组中任意两个元素的最大差值,以及存在的组数