C++实现打印杨辉三角形
1.用固定大小数组来实现
首先应该想到的是要使用二维数组来实现
#include<iostream>
#include<iomanip>
using namespace std;
const int n = 5;//以五行示例,如想改变行数只需改变n的值
int main()
{
int a[n][n];
int i, j;
for (i = 0; i < n; i++)
{
for (j = 0; j <= i; j++)
{
if (j == 0 || j == i)//如果是最左别或者最右边的元素就等于1
{
a[i][j] = 1;
}
else//如果是中间元素就等于上一行的左边一个元素+对应上一行元素
{
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
}
}
for (i = 0; i < n; i++)
{
cout << setw(n - i + 1);//输出域宽,setw()函数参数值是域宽
for (j = 0; j <= i; j++)
{
cout << a[i][j] << " ";
}
cout << endl;//没输出一行就换行
}
return 0;
}
运行结果
2.用vector容器构造二维数组来实现
resize()函数可以重新指定vector容器的大小
#include<iostream>
#include<vector>
#include<iomanip>
using namespace std;
const int n = 5;
int main()
{
vector<vector<int> >result(n);
for (int i = 0; i < n; i++)
{
result[i].resize(i+1);//所构造的二维数组的每一行都是不一样的长度,根据杨辉三角形的每一行不同列数来构造
}
for (int i = 0; i < result.size(); i++)
{
for (int j = 0; j <=i; j++)
{
if (j == 0 || j == i)//如果是最左别或者最右边的元素就等于1
{
result[i][j] = 1;
}
else//如果是中间元素就等于上一行的左边一个元素+对应上一行元素
{
result[i][j] = result[i - 1][j - 1] + result[i - 1][j];
}
}
}
for (int i = 0; i < result.size(); i++)//注意这里的i的条件是vector的大小
{
cout << setw(n - i+1);//输出域宽,n代表行数,i代表每一行
for (int j = 0; j < i+1; j++)
{
cout << result[i][j] << " ";
}
cout << endl;
}
return 0;
}
运行结果同上
版权声明:本文为qq_55227591原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。