### 創建動態數組

#include <iostream>
using namespace std;

//獲取一片內存中的值【當作二維數組執行】
int GetValue(int * arr, int nSize, int nRow, int nColumn)
{
if (nRow >= nSize || nColumn >= nSize)
{
return 0;
}
return *(arr + nRow*nSize + nColumn);
}

//設置內存中的值【當作二維數組執行】
void SetValue(int *arr, int nSize, int nRow, int nColumn, int value)
{
if (nRow >= nSize || nColumn >= nSize)
{
return;
}
*(arr + nRow*nSize + nColumn) = value;
}

//生成動態楊輝三角
void DTYH(int nLevel)
{
int *arr=new int[(nLevel)*(nLevel)];
memset(arr, 0, sizeof(int) * nLevel * nLevel);
for (int i = 0; i < nLevel; i++)
{
SetValue(arr, nLevel, i, 0, 1);
SetValue(arr, nLevel, i, i, 1);
}
for (int i = 2; i < nLevel; i++)
{
for (int j = 1; j < i; j++)
{
SetValue(arr, nLevel, i, j, GetValue(arr, nLevel, i - 1, j - 1) + GetValue(arr, nLevel, i - 1, j));
}
}
for (int i = 0; i < nLevel; i++)
{
if (i % 2)
{
cout << "    ";
}
for (int j = 0; j < (nLevel - i) / 2; j++)
{
if (nLevel % 2 & j == 0 & i % 2)
{
continue;
}
else
{
cout << "        ";
}
}
for (int j = 0; j <= i; j++)
{
printf("%-8d", GetValue(arr, nLevel,i,j));
}
cout << endl;
}
delete[]arr;
}

int main()
{
int a;
while (scanf_s("%d", &a),a)
{
DTYH(a);
}
return 0;
}