找出每行每列的规律:
由此图可以看出:
行规律为:确定每行的前两个数的差值之后,此后每个数均由前一个数 + (前两个数的差值 + 1)
列规律为:确定前两列初始值之后此后每一列的初始值均由前一列的初始值 + (前两列的差值 + 1)
由此可知:需要定义第一行的初始值以及前两个数的差值、第二行的初始值以及前两个数的差值和第二行与第三行初始值的差值(总共五个数值)
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int n;
while (cin >> n) {
int RowStart =
1; //每行的初始值(第一次代表第一行的初始值,往后依次第二行初始值……)
int FirDifference = 2; //第一行第一个数与第二个数之间的差值
int SecStart = 2; //现代表第二行的初始值
int Difference =
2; //现指第二行与第三行初始值的差值(以后依次是第三行与第四行……)
int SecDifference =
3; //第二行第一个数与第二个数之间的差值(以后依次是第三行……)
for (int i = n; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
cout << RowStart;
if (i != 1 && j != i) //控制行尾不会出现多余的空格
cout << " ";
RowStart += FirDifference; //算出每行的第二个数到第i个数的值
FirDifference++; //每行每两个数之间 差值 的规律是依次加一
}
cout << endl;
RowStart =
SecStart; //现指赋给m第二行的初始值(往后依次是第三行的初始值……)
SecStart += Difference; //赋给c下一行的初始值
Difference++; //任意相邻两行初始值的差值的规律
FirDifference =
SecDifference; //现指第二行第一个数与第二个数之间的差值(往后依次是第三行……)
SecDifference++; //每行每两个数之间 差值 的规律是依次加一
}
}
return 0;
}