面试训练打印数组

来源:互联网 发布:黄景瑜是淘宝什么模特 编辑:程序博客网 时间:2024/05/01 10:58

这道题目感觉有点复杂,至少我比较讨厌这种题目 边界条件考虑的过于多了。

海涛的思路是 猜测确定边界吧 应为5*5矩阵最里面点为2,2 6*6矩阵最里面的点为2*2

得出的节点时rows>start*2 &&cols>start *2那么就满足进行打印的条件就可以输出。

反正代码不好写,我还是感觉的谢谢吧。

#include "stdio.h"void printMatrix(int **data,int cols,int rows,int start){int endx=rows-start-1;int endy=cols-start-1;int i;for(i=start;i<=endy;i++){printf("%d ",(data+start*cols)[i]);}if(start<endx){for(i=start+1;i<=endx;i++){printf("%d ",(data+i*cols)[endy]);}}if(start<endx&&start<endy){for(i=endy-1;i>=start;i--){printf("%d ",(data+endx*cols)[i]);}}if(start<endx-1&&start<endy){for(i=endx-1;i>start;i--){printf("%d ",(data+i*cols)[start]);}}}int main(){int data[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};int start =0;int cols=sizeof(data[0])/sizeof(data[0][0]);int rows = sizeof(data)/sizeof(data[0]);start=0;while(cols>start*2&&rows>start*2){printMatrix(data,cols,rows,start);start++;}}
函数入参为二位指针,必须计算出来前第一位的位置,才能直接访问



原创粉丝点击