这道题目感觉有点复杂,至少我比较讨厌这种题目 边界条件考虑的过于多了。
海涛的思路是 猜测确定边界吧 应为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++;
}
}
函数入参为二位指针,必须计算出来前第一位的位置,才能直接访问