【第4讲】组合数

本文介绍了组合数的定义,阐述了组合数的递推公式,并通过杨辉三角这一数学概念来加深理解。通过递推公式解析了从n个不同元素中选取m个元素的组合计数方式,同时提供了CSDN博主的文章链接,帮助读者更好地掌握这一数学原理。
摘要由CSDN通过智能技术生成

组合数的定义

组合数表示为 C n m C_n^m Cnm,它的含义是:从n个不同的元素中,选择m个元素的种数。

组合数的递推公式

C n m = C n − 1 m − 1 + C n − 1 m C_n^m=C_{n-1}^{m-1}+C_{n-1}^{m} Cnm=Cn1m1+Cn1m

递推公式的理解

比如说我们要从5个元素中选取3个元素,那么可以表示为 C 5 3 C_5^3 C53,那么根据递归公式就可以表示成为 c 4 3 + c 4 2 c_4^3+c_4^2 c43+c42
首先,对于 c 4 2 c_4^2 c42,我们可以理解为在五个数字中找出的三个数字中,包含某个特定元素(这里假设特定元素是1)。那么也就可以理解为我们已经把1这个特定元素取出来了,那么只需要再从除1之外的剩余4个元素中再取出来两个元素即可。
其次,对于 C 4 3 C_4^3 C43的话,可以理解为,我们在五个元素中取出来三个元素,但是这三个元素中没有1这个特定元素,也就是说除了1这个元素,我们只需要在五个元素中的除1这个元素之外的四个元素中再取出来3个元素即可。也就是说五个元素,我们不取1这个元素,那么我们不算1这个元素,那么五个元素就剩下了四个元素,我们只需要在4个元素中取出来三个元素即可保证取出来的三个元素中不会包含1这个元素。

题目描述

给定一个非负整数n,请打印出来杨辉三角的前n行。

解题思路

杨辉三角的规律正好和组合数的递推公式相吻合。

解题代码

#include <stdio.h>
#include <string.h>
int main()
{
	int n;
	scanf("%d",&n);
	int num[n][n];
	int i, j;
	memset(num,0,n);
	num[1][1] = 1;
    num[2][1] = 1, num[2][2] = 1;
	for( i = 1; i <= n; ++i)
	{
		for( j = 1; j <= i; ++j)
		{
			if (j == 1 || j == i)
			{
				num[i][j] = 1;
				printf("1");
				continue;
			}
			else
			{
				num[i][j] = num[i - 1][j] + num[i- 1][j - 1];
				printf("%d",num[i][j]);
			}
		}
		printf("\n");
	}
	return 0;
}

写在最后

该文章内容是我阅读了CSDN博主英雄哪里出来的博文后,自己记录的一些观点和想法,希望对大家有帮助。英雄哪里出来的对应博文地址:组合数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值