本文主要是介绍联想笔试2011,顺时针输出矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
例如:如果输入如下矩阵:
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。
这个其实实现起来不难,就是那边边界条件,以及什么时候需要+1换方向的,一不注意就错了,比较辛酸。
#include<stdio.h>
#define N 4void DisplayClockwise( int (*arr)[4] , int n)
{int row=0;int column=0;int direction=0; //0:left->right 1:up->down 2:right->left 3:down->upwhile(direction<16){if((direction++)%4==0){//left->rightwhile( row<n && arr[column][row]!=0 ){printf("%d ",arr[column][row]);arr[column][row]=0;if(row==n-1){break;}else if( arr[column][row+1]!=0)++row;}++column;//why is here ? but not int the "if" inside while() just think}if((direction++)%4==1){//up->downwhile( column<n && arr[column][row]!=0 ){printf("%d ",arr[column][row]);arr[column][row]=0;if(column==n-1){break;}else if( arr[column+1][row]!=0)++column;}--row;}if((direction++)%4==2){//right->leftwhile( row>-1 && arr[column][row]!=0 ){printf("%d ",arr[column][row]);arr[column][row]=0;if(row==0){break;}else if( arr[column][row-1]!=0)--row;}--column;}if((direction++)%4==3){//down->upwhile( column>-1 && arr[column][row]!=0 ){printf("%d ",arr[column][row]);arr[column][row]=0;if(column==0){break;}else if( arr[column-1][row]!=0)--column;}++row;}}
}int main()
{int arr[N][N];int i;int j;//initalization //try to use less varialblesfor(i=0; i<N; i++)for(j=0; j<N; j++){arr[i][j]=4*i+j+1; //1 2 3...}for(i=0; i<N; i++){for(j=0; j<N; j++){printf("%-3d ",arr[i][j]);}printf("\n");}DisplayClockwise( arr , N);return 0;
}
这篇关于联想笔试2011,顺时针输出矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!