栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

杨辉三角(C++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

杨辉三角(C++)

第一个版本:用二维数组
优点:
简单明了,只要弄清楚每个变量位置的值是由哪个位置的值相加得来的,即可写出

缺点:
一半的数组空间没有利用到,浪费了

//二维数组版本会导致一半的空间被浪费,只用到了半边数组 

#include 

using namespace std;

int main()
{
	int a[500][500] = {1};
	int n;
	cout << "Please input the n: ";
	cin >> n;
	for (int i = 1; i <= n; ++i)//从0开始的话,第二层循环相当于没做事 
	{
		for (int j = 0; j < i; ++j)
		{
			a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
		}
	}
	for (int i = 1; i <= n; ++i)
	{
		for (int j = 0; j < i; ++j)
		{
			cout << a[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}

改进:
1.使用一维数组使得每次操作仅在一行中实现,还是需要一定的空间
2.不用数组,根据公式边计算边输出,省下很多空间,但是需要理解计算公式
我直接跳过一维数组这个优化过程,写不用数组的版本

#include 

using namespace std;

int main()
{
	int n;
	int sum = 1;
	cout << "Please input the n: ";
	cin >> n;
	for (int i = 1; i <= n; ++i)
	{
		sum = 1;
		for (int j = 1; j <= i; ++j)
		{
			if (j > 1)
			sum = sum * (i - j + 1)/(j - 1);
			cout << sum << " ";
		}
		cout << endl;
	}
	return 0;
}

用i,j分别表示当前的行列数,因为杨辉三角上的数是可以通过组合数公式计算出来的,而且跟当前的行列数有关联,所以直接套用公式:sum = sum * (i - j + 1)/(j - 1)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298139.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号