#include <iostream>
#include <cstring>
/*輸入正整數n, 輸出將1~n*n順時針排列矩陣*/
using namespace std;
void DisplayMatrix(int *A, int n);
int main()
{
int *A ;
int n;
cin >> n;
A = new int [n*n];
memset (A, 0, n*n*sizeof (int));
enum DIRECTION {DOWN = 0, LEFT, UP, RIGHT} dir = DOWN;
int row, col, k;
row = 0; col = n - 1;
for ( k = 1; k <= n*n; k++) {
A [row*n+col] = k;
switch (dir) {
case DOWN :
if (row < n-1 && A [(row+1)*n+col] == 0) {
++row;
} else {
--col; dir = LEFT;
}
break;
case LEFT :
if (col > 0 && A [row*n+col-1] == 0) {
--col;
} else {
--row; dir = UP;
}
break;
case UP :
if (row > 0 && A [(row-1)*n+col] == 0) {
--row;
} else {
++col; dir = RIGHT;
}
break;
case RIGHT :
if (col < n-1 && A [row*n+col+1] == 0) {
++col;
} else {
++row; dir = DOWN;
}
break;
}
}
DisplayMatrix (A, n);
delete [] A;
}
void DisplayMatrix (int *A, int n)
{
for (int row =0; row < n; ++row) {
for (int col = 0; col < n; ++col) {
cout.width (4);
cout << A [row*n+col];
}
cout << endl;
}
}
C++輸入正整數,輸出1-n*n順時針排列矩陣之動態分配
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.