问题描述:
请打印出下列三角形:
很明显,第i行的第j个元素等于第i-1行的第j-1和j+1的元素和。
所以较常见的方法是用数组存储所有行的值,空格位置默认为0。
但下面这种方法不需要额外的空间,直接观察规则得到当前位置元素的值等于前一个位置的值 *(i - j + 1) / j. i为行号,j为列号(但这里的列不包括数字后面空格所占位置)。
参考自-菜鸟教程
#include<stdio.h>
#include<iostream>
using namespace std;
int main() {
int rows, coef = 1;
cout << "Enter number of rows: ";
cin >> rows;
for(int i = 0; i < rows; ++i)
{
for(int space = 0; space < rows-i-1; ++space)
cout <<" ";
for(int j = 0; j <= i; ++j)
{
if (j == 0 || i == 0)
coef = 1;
else
coef = coef * (i - j + 1) / j;
cout << coef << " ";
}
cout << endl;
}
return 0;
}