杨辉三角(无数组)

目录

一.问题描述

二.输入形式

三.输出形式 

四.输入样例 

五.输出示例 

六.参考代码 


一.问题描述

在屏幕上显示如下杨辉三角形:
                             1
                         1      1
                     1      2      1
                 1       3     3       1
             1       4      6      4       1
         1       5      10     10      5       1
    ……    ……   ……   ……  ……  ……

二.输入形式

从键盘输入整数n(n>=0且n<=12)。

三.输出形式 

在屏幕上输出n+1行杨辉三角形。

四.输入样例 

3

五.输出示例 

------***1

----***1***1

--***1***2***1

***1***3***3***1

六.参考代码 

#include <iostream>
#include <iomanip>

using namespace std;

int work(int num) {
	int sum=1;
	if(0==num)
		num=1;
	for(int i=1; i<=num; i++)
		sum*=i;
	return sum;
}
int main() {
	int r,r1;
	cin>>r;
	r++;
	r1=r;
	for(int i=1; i<=r; i++) {
		for(int k=1; k<=r1-1; k++)
			cout<<setw(2)<<" ";
		for(int z=1; z<=i; z++)
			cout<<setw(4)<<work(i-1)/(work(z-1)*work(i-z));
		if(i!=r)
			cout<<"\n";
		r1--;
	}
	return 0;
}

### 杨辉三角与排列组合的关系 杨辉三角是一种展示二项式展开系数的几何图形,其每一行中的数值对应于特定阶数的二项式系数。这些系数可以用来计算排列组合问题中的组合数。 #### 组合数定义 组合数 \( C(n, k) \) 表示从 \( n \) 个不同的元素中选取 \( k \) 个元素的方式数目[^1]。它可以通过以下公式计算: \[ C(n, k) = \frac{n!}{k!(n-k)!} \] #### 杨辉三角的结构 杨辉三角的第 \( n \) 行(从零开始计数)包含了所有的组合数 \( C(n, k) \),其中 \( k \) 的范围是从 0 到 \( n \)[^1]。具体来说,对于任意整数 \( n \geq 0 \) 和 \( 0 \leq k \leq n \),有: \[ C(n, k) = C(n-1, k-1) + C(n-1, k) \] 这一递推关系正是构建杨辉三角的核心原理[^4]。 #### 使用杨辉三角表示组合数 在杨辉三角中,每个位置上的值都可以看作是一个具体的组合数。例如,在第三行(\( n=3 \)),我们可以找到如下组合数序列:\[ C(3, 0), C(3, 1), C(3, 2), C(3, 3) \] 即为 [1, 3, 3, 1][^1]。 #### 计算实例 考虑如何利用杨辉三角来解决实际问题。比如要找出从5本书里选出3本的不同方式数量,则需计算 \( C(5, 3) \): ```cpp #include <iostream> using namespace std; int main(){ int n = 5; int k = 3; // 初始化二维数组存储杨辉三角数据 int comb[n+1][k+1]; for(int i=0;i<=n;i++){ for(int j=0;j<=min(i,k);j++){ if(j==0 || j==i){ comb[i][j]=1; } else{ comb[i][j]=comb[i-1][j-1]+comb[i-1][j]; } } } cout << "The number of ways to choose "<<k<<" books from "<<n<<": "<<comb[n][k]<<endl; return 0; } ``` 此程序展示了通过动态规划填充整个杨辉三角的一部分,并最终获得所需的结果 \( C(5, 3) = 10 \)[^3]。 #### 总结 综上所述,杨辉三角不仅提供了一种直观的方式来理解和记忆复杂的组合公式,而且还是编程实践中处理离散数学问题的有效工具之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值