友情提示:380元/半年,儿童学编程,就上码丁实验室。
【问题描述】打印杨辉三角形的前10行。
杨辉三角形如下图1所示:
1
1 1
1 2 1
1 3 3
1
1 4 6 4 1
图1
问题解析:
直接找不容易找出规律,但是我们可以这样考虑,将图1转换为如下的图2形式,也就可以看出杨辉三角形也就是二维数组的一个三角区域。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
图2
假设通过二维数组a来存储,i表示行,j表示列。我们可以看出每个数据之间有如下的规律:
1)每一行的元素个数与行数相同;
2)每一行的第一个元素和最后一个元素都是1;
3)中间的元素a[i][j]= a[i-1][j-1]+a[i-1][j];
4)最后要打印杨辉三角形的样式只需要控制好每行第一个元素的位置即可。
完整代码参考:
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
inta[11][11] = {};
a[1][1] =1;
for(int i= 2;i <= 10;i++){
//将行首和行尾元素均赋值为1
a[i][1]= 1;
a[i][i]= 1;
//计算中间的元素
for(intj = 2;j <= i;j++){
a[i][j]= a[i-1][j-1] + a[i-1][j];
}
}
//控制输出的空格输出杨辉三角形
for(int i= 1;i <= 10;i++){
if(i!=10){
cout<< setw((10-i)*3) << ” “;
}
for(intj = 1;j <= i;j++){
cout<< setw(6) << a[i][j];
}
cout<< endl;
}
return 0;
}
注:
1、setw(int n)只是对直接跟在<<后的输出数据起作用,而在之后的<<需要在之前再一次使用setw;
2、n是在输出时分配了n个字符的输出宽度,然后默认的是在n个字符宽度中右对齐输出;
3、需要包含头文件<iomanip>。
转自公众号:
noip案例讲解