http://noi.openjudge.cn/ch0108/23/
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示:

输入输入的第一行上有两个整数,依次为row和col。
余下有row行,每行包含col个整数,构成一个二维整数数组。
(注:输入的row和col保证0 < row < 100, 0 < col < 100)输出按遍历顺序输出每个整数。每个整数占一行。样例输入
4 4 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
样例输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
代码如下:
1 #include <stdio.h>
2 #define maxN 101
3 int main(int argc, char *argv[])
4 {
5 int row,col,i,j,k;
6 int a[maxN][maxN];
7 int count;
8
9 scanf("%d%d",&row,&col);
10 for(i=0;i<row;i++)
11 {
12 for(j=0;j<col;j++)
13 {
14 scanf("%d",&a[i][j]);
15 }
16 }
17
18 if(row==1)//只有一行
19 {
20 i=0;j=0;
21 for(k=1;k<=col;k++)
22 { printf("%d
",a[i][j]);j++;}
23 }
24 else if(col==1)//只有一列
25 {
26 i=0;j=0;
27 for(k=1;k<=row;k++)
28 { printf("%d
",a[i][j]);i++;}
29 }
30 else
31 {
32 i=0;j=0;
33 count=row*col;
34 while(count>0)
35 {
36 for(k=1;k<col;k++)
37 { count--; printf("%d
",a[i][j]);j++;} //输出一个环的上面那一条边
38
39 for(k=1;k<row;k++)
40 { count--; printf("%d
",a[i][j]);i++;} //输出一个环的右侧那一条边
41
42 for(k=1;k<col;k++)
43 { count--; printf("%d
",a[i][j]);j--;} //输出一个环的下面那一条边
44
45 for(k=1;k<row;k++)
46 { count--; printf("%d
",a[i][j]);i--;} //输出一个环的左侧那一条边
47
48 i++;
49 j++;
50 row-=2;
51 col-=2;
52 if(row==1)//只剩下一行
53 {
54 for(k=1;k<=col;k++)
55 { count--; printf("%d
",a[i][j]);j++;}
56 }
57 else if(col==1)//只剩下一列
58 {
59 for(k=1;k<=row;k++)
60 { count--; printf("%d
",a[i][j]);i++;}
61 }
62 }
63 }
64 return 0;
65 }
