1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
找出规律,并打印一个N*N的矩阵,规律就是从首坐标开始顺时针依次增大
代码如下:
1 #include <iostream> 2 using namespace std; 3 4 void Calculate(int **matrix, int N); 5 int main() 6 { 7 int N; 8 cin >> N; 9 int **matrix = new int*[N]; 10 for(int i = 0; i < N; ++i) 11 matrix[i] = new int[N]; 12 for(int i = 0; i < N; ++i) 13 { 14 for(int j = 0; j < N; ++j) 15 matrix[i][j] = 0; 16 } 17 Calculate(matrix, N); 18 for(int i = 0; i < N; ++i) 19 { 20 for(int j = 0; j < N; ++j) 21 cout << matrix[i][j] << " "; 22 cout << endl; 23 } 24 25 return 0; 26 } 27 28 void Calculate(int **matrix, int N) 29 { 30 int m = 1; 31 for(int i = 0; i < N/2; ++i) 32 { 33 for(int j = i; j < N - i; ++j) 34 if(matrix[i][j] == 0) 35 matrix[i][j] = m++; 36 for(int j = i + 1; j < N - i; ++j) 37 if(matrix[j][N - i - 1] == 0) 38 matrix[j][N - i - 1] = m++; 39 for(int j = N - i - 1; j > i; j--) 40 if(matrix[N - 1 - i][j] == 0) 41 matrix[N - 1 - i][j] = m++; 42 for(int j = N - i - 1; j > i; j--) 43 if(matrix[j][i] == 0) 44 matrix[j][i] = m++; 45 } 46 if(N % 2 == 1) 47 matrix[N/2][N/2] = m; 48 }