杨辉三角 c++

第一种输出图形(直角三角形) 

#include <cstdio>
#include <iostream>
using namespace std;
void yh(int a[10][10],int n){  //定义n<10
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i==j||j==1){    //杨辉三角每行首尾都为1
				a[i][j]=1;
			}
			else a[i][j]=a[i-1][j-1]+a[i-1][j];//上一行数与上一行前一位数之和
		}
	}
	for(int i=1;i<=n;i++){
	    for(int j=1;j<=n;j++){
	    	if(i>=j)
			printf("%6d",a[i][j]);
		}
	printf("\n");	
}
}
int main(){
	int n,a[10][10];
	cin>>n;
	yh(a,n);
	return 0;
}

第二种输出图形(等腰三角形) 

#include <cstdio>
#include <iostream>
using namespace std;
void yh(int a[10][10],int n){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(i==j||j==1){
				a[i][j]=1;
			}
			else a[i][j]=a[i-1][j-1]+a[i-1][j];
		}
	}
	for(int i=1;i<=n;i++){
	    int k=9-i;
        while (k--){
            printf("   ");
        }
	    for(int j=1;j<=n;j++){
	    	if(i>=j)
			printf("%6d",a[i][j]);
		}
	printf("\n");	
}
}
int main(){
	int n,a[10][10];
	cin>>n;
	yh(a,n);
	return 0;
}

### 使用C++实现杨辉三角形 杨辉三角形是一种经典的数学结构,其每个数字等于它上方两个数字之和。以下提供一种基于递归计算组合数的实现方法,这种方法不依赖数组存储中间结果[^1]。 ```cpp #include <iostream> using namespace std; // 计算组合数 C(n, r) int combination(int n, int r) { if (r == 0 || r == n) { return 1; } else { return combination(n - 1, r - 1) + combination(n - 1, r); } } // 生成杨辉三角形 void generatePascalTriangle(int numRows) { for (int i = 0; i < numRows; i++) { for (int j = 0; j <= i; j++) { // 计算当前位置的组合数 int result = combination(i, j); cout << result << " "; } cout << endl; } } int main() { int numRows; cout << "请输入要生成的杨辉三角形的行数:"; cin >> numRows; generatePascalTriangle(numRows); return 0; } ``` 此代码通过递归函数 `combination` 计算组合数,并在主循环中逐行输出杨辉三角形的每一行[^1]。 另一种常见的实现方式是使用二维数组来存储杨辉三角形的值,并通过递推公式计算每个位置的值[^3]。以下是基于二维数组的实现: ```cpp #include <bits/stdc++.h> using namespace std; #define N 35 int main() { int a[N][N]; int n, i, j; cin >> n; for (i = 1; i <= n; i++) { for (j = 1; j <= i; j++) { if (j == 1 || j == i) { // 每行的第一个和最后一个元素为1 a[i][j] = 1; } else { a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; // 杨辉三角基本公式 } } } // 输出数据 for (i = 1; i <= n; i++) { for (j = 1; j <= i; j++) { cout << a[i][j] << " "; } cout << endl; } return 0; } ``` 此代码利用二维数组 `a` 存储杨辉三角形的值,并通过双重循环计算每个位置的值[^3]。 还有一种更高效的实现方式是使用一维数组动态更新当前行的值[^4]。以下是基于一维数组的实现: ```cpp #include <iostream> #include <cstring> using namespace std; int main() { int n; cin >> n; int a[35]; // 储存上一行的数字 memset(a, 0, sizeof(a)); a[1] = 1; int b[35]; // 储存下一行的数字 memset(b, 0, sizeof(b)); cout << "1" << endl; // 打印第一行 for (int i = 2; i <= n; i++) { for (int j = 1; j <= i; j++) { b[j] = a[j - 1] + a[j]; cout << b[j] << " "; } cout << endl; memcpy(a, b, sizeof(b)); // 将当前行数组赋值到a作为上一行数组 } return 0; } ``` 此代码通过两个一维数组 `a` 和 `b` 分别存储上一行和当前行的值,并通过 `memcpy` 函数实现行间数据的传递[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值