算法思路
当 i <= (n - 1) / 2 时,对于任意的第 i 行,可以分为前中后三段。
前段为从 1 到 i 遍历输出,后段为从 i 到 1 遍历输出,剩余即为中段,输出 n - 2 * i 个 i + 1。
而当 i > (n - 1) / 2 时,与先前情况类似,具体体现为第 i 行与第 n - 1 - i 行相同。
#include <iostream>
using namespace std;
int main()
{
int n;
while (cin >> n, n)
{
for (int i = 0; i < n; i++)
{
int t = (i <= (n - 1) / 2) ? i : n - 1 - i;
for (int j = 0; j < t; j++) //前段,从 1 遍历到 i
cout << j + 1 << " ";
for (int j = 0; j < n - 2 * t; j++) //中段,输出 n - 2 * i 个 i + 1
cout << t + 1 << " ";
for (int j = 0; j < t; j++) //后段,从 i 遍历到 1
cout << t - j << " ";
cout << endl;
}
cout << endl;
}
return 0;
}