a417: 螺旋矩陣

题目:

 每行有一正整数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是偶数:……

原文地址:https://www.cnblogs.com/tushukai/p/7290166.html