1、题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出来的数字为:1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10
2、解题思想
对矩阵进行操作,我们可以选择二维数组,一个角标存储行信息、一个角标存储列信息,这样的话,我们就可以用二维数组把矩阵表示出来啦!想要对矩阵进行顺指针打印,我们可以先把矩阵看成多个四方格子套在一起,大格子套小格子,这样我们只需要建立函数实现把最外面的大格子的数据顺时针打印出来,然后递归这个函数就可以啦!
如果大家了解矩阵的性质的话,可以发现矩阵的第一行元素(从左至右),其行角标不变,列角标依次增加;矩阵的最后一列元素(从上至下),其行角标依次增加,列角标不变;矩阵的最后一行元素(从右至左),其行角标不变,列角标依次递减;矩阵的第一列元素(从下至上),其行角标依次递减,列角标不变。由此性质,我们运用四个for循环就可以把矩阵最外一层的元素顺指针打印出来啦!
代码如下:
public class Demo {
public static void clockwiseOutput(int[][] num,int start,int end) {
if(start>=end || end<=0) {
return ;
}
for(int i=start; i<=end;i++) {
System.out.print(num[start][i]);//第一行
}
for(int i=start+1;i<=end;i++) {
System.out.print(num[i][end]);//第四列出去最后一行;
}
for(int i=end-1;i>=start;i--) {
System.out.print(num[end][i]);//第四行
}
for(int i=end-1;i>start;i--) {
System.out.print(num[i][start]);//第一列除去第四行
}
clockwiseOutput(num,start+1,end-1);
}
public static void main(String[] args) {
int[][] num=new int[100][100];
int n=4;
int count =1;
for(int i=0;i<n;i++) {
System.out.println();
for(int j=0;j<n;j++) {
num[i][j]=count++;
System.out.print(num[i][j]);
}
}
System.out.println();
clockwiseOutput(num,0,n-1);
}
}