C++排列与组合算法详解

upd 2023/6/3:

本文已经发布进阶版,代码效率比此篇高,有需求的读者可以来阅读

【C++】 排列与组合算法详解(进阶篇)https://blog.csdn.net/xingchen_2008/article/details/130782915


嘿!好久不见……

今天我又来 水文章 发文章了

今天来介绍一下非常垃圾排列组合算法

声明:本篇文章含有手残作者画的图,大家不要介意(*_*)

学过数学的都知道,组合用“C”表示,排列用“P”或“A”表示

所谓组合,就是在x个东西中无顺序地拿y个东西(x>y),所有不重不漏的情况的个数

如:

C++排列与组合算法详解_第1张图片

用算术方法的话,就是

C_{4}^{2}=\frac{4*3}{2*1}=\frac{12}{2}=6

同理,

A_{4}^{2}=4 \times 3=12

int jiecheng(int x)//阶乘代码
{
    int res = 1;//返回值变量
    for (int i = x; i; i -- )//用for实现逐次减一
        res *= i;//乘入返回值变量
    return res;//返回
}

我们可以继而推导出组合的一般公式:(!代表阶乘)

C _{x}^{y}=\frac{x!}{(x-y)! \times y!}

以及排列的一般公式:

A_{x}^{y}=\frac{x!}{y!}

再用代码实现:

int C(int x,int y)//定义组合函数
{
    int ret;
    ret=jiecheng(x)/jiecheng(x-y)/jiecheng(y);//公式
    return ret;
}

int A(int x,int y)//定义排列函数
{
    int ret;
    ret=jiecheng(x)/jiecheng(y);//公式
    return ret;
}

完整代码如下:

#include
using namespace std;
int jiecheng(int x)
{
    int ret=1;
    for(int i=x;i>0;i--)
        ret*=i;
    return ret;
}
int C(int x,int y)
{
    int ret;
    ret=jiecheng(x)/jiecheng(x-y)/jiecheng(y);
    return ret;
}
int A(int x,int y)
{
    int ret;
    ret=jiecheng(x)/jiecheng(y);
    return ret;
}
int main()
{
	int a,b;
	cin>>a>>b;
	cout<<"组合:"<

最终效果:

C++排列与组合算法详解_第2张图片

本期的H_{2}O文章就到这里了,点个赞,点个关注 ,感谢你们~

你可能感兴趣的:(笔记,c++,算法)