输入数字N,打印出一个N行N列的矩阵,其他第一层为X,第二层为Y,第三层开始分开为0,1,2...
如示图(N=10):
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
0 | X | X | X | X | X | X | X | X | X | X |
1 | X | Y | Y | Y | Y | Y | Y | Y | Y | X |
2 | X | Y | 0 | 0 | 0 | 0 | 0 | 0 | Y | X |
3 | X | Y | 0 | 1 | 1 | 1 | 1 | 0 | Y | X |
4 | X | Y | 0 | 1 | 2 | 2 | 1 | 0 | Y | X |
5 | X | Y | 0 | 1 | 2 | 2 | 1 | 0 | Y | X |
6 | X | Y | 0 | 1 | 1 | 1 | 1 | 0 | Y | X |
7 | X | Y | 0 | 0 | 0 | 0 | 0 | 0 | Y | X |
8 | X | Y | Y | Y | Y | Y | Y | Y | Y | X |
9 | X | X | X | X | X | X | X | X | X | X |
C++实现如下:
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
while(1)
{
cout << "Enter a number N: ";
int n;
cin >> n;
int nLayers = n / 2;
if( n % 2 != 0)
++nLayers;
int nLayerI = 0, nLayerJ = 0, curLayer = 0;
cout << "N = " << n << ", Layers = " << nLayers << endl;
cout << " ";
for( int i = 0; i < n; ++i)
cout << i << " ";
cout << endl;
for(int row = 0; row < n; ++row)
{
cout << row << " ";
for(int col = 0; col < n; ++col)
{
if( row < nLayers)
nLayerI = row % nLayers;
else if( row > nLayers)
nLayerI = (n-1-row) % nLayers;
else
{
if( n % 2 != 0)
nLayerI = nLayers - 2;
else
nLayerI = nLayers - 1;
}
if( col < nLayers)
nLayerJ = col % nLayers;
else if( col > nLayers)
nLayerJ = (n-1-col) % nLayers;
else
{
if( n % 2 != 0)
nLayerJ = nLayers-2;
else
nLayerJ = nLayers-1;
}
curLayer = (nLayerI < nLayerJ ? nLayerI : nLayerJ);
if(curLayer == 0)
cout << "X ";
else if( curLayer == 1)
cout << "Y ";
else
cout << curLayer - 2 << " ";
}
cout << endl;
}
}
return 0;
}