题目:
每行有一正整数T,代表有几组测试数据
接下来有T行,每行有N、M两正整数
N为矩阵长宽,就是会有N*N矩阵
M为方向,M=1为顺时钟,M=2为逆时钟
N范围为1~100之间
思路:
所以,代码:
1 #include <stdlib.h> 2 #include <iostream> 3 #include <stdio.h> 4 using namespace std; 5 6 int main() { 7 int T, M, N; 8 int R[100][100]; 9 cin >> T; 10 for (int i=0; i<T; i++) { 11 int n = 1; 12 cin >> N >> M; 13 for (int j=0; j<(N+1)/2; j++) { 14 for (int k=0; k<N-2*j-1; k++) 15 R[j][j+k] = n++; 16 for (int k=0; k<N-2*j-1; k++) 17 R[j+k][N-j-1] = n++; 18 for (int k=0; k<N-2*j-1; k++) 19 R[N-j-1][N-k-j-1] = n++; 20 for (int k=0; k<N-2*j-1; k++) 21 R[N-j-k-1][j] = n++; 22 } 23 if (N%2) 24 R[N/2][N/2] = n; 25 for (int j=0; j<N; j++) { 26 for (int k=0; k<N; k++) 27 if (M == 1) 28 printf("%5d", R[j][k]); 29 else 30 printf("%5d", R[k][j]); 31 printf(" "); 32 } 33 printf(" "); 34 } 35 return 0; 36 }
循环的方向如箭头所示.
先用循环,大的套小的.
循环中一个往左,一个往下,一个右,一个上
M是奇数:中间的点打印
M是偶数:……