/*
打印一个 N*N 的方阵,N为每边
字符的个数(3<N<20), 要求最
外一层为"T", 第二层为"J", 从第三层
起每层依次打印数字 1,2,3,...
(下图以N为15为例)
N=15 打印出下面图形
TTTTTTTTTTTTTTT
TJJJJJJJJJJJJJT
TJ11111111111JT
TJ12222222221JT
TJ12333333321JT
TJ12344444321JT
TJ12345554321JT
TJ12345654321JT
TJ12345554321JT
TJ12344444321JT
TJ12333333321JT
TJ12222222221JT
TJ11111111111JT
TJJJJJJJJJJJJJT
TTTTTTTTTTTTTTT
*/
void printMatrix(int n)
{
int i = 0, j = 0, indexi = 0, indexj = 0;
char arr[] = {'T','J','1','2','3','4','5','6','7','8'};
if(n < 3)
{
cout << "n must be great than 3" << endl;
return;
}
for(i = 0; i < n;i++)
{
indexi = i;
if(i >= (n >> 1 )) //Here must be not less than
indexi = n - i - 1; //Here must minus 1
for(j = 0; j < n; j++)
{
indexj = j;
if(j >= (n >> 1))//Here must be not less than
indexj = n - j - 1;//Here must minus 1
if(indexj > indexi)
indexj = indexi;
cout << arr[indexj];
}
cout << endl;
}
}
void TestPrintMatrix()
{
int i = 4;
cout << endl;
for(i = 4; i < 20; i++)
{
cout << "N = " << i << endl;
printMatrix(i);
system("pause");
}
}