顺时针打印矩阵
程序员文章站
2024-03-17 15:56:10
...
#include <stdio.h>
#include<assert.h>
/*顺时针打印矩阵*/
/*步骤:
* 1、确定打几圈,有行或列中,小的那个决定 int i=(n+1)/2
* 2、写每一圈的打印逻辑
*/
#define N 3 /*N==col*/
/*打印一圈的逻辑*/
/*row:行 col:列
time:用来记录打印了几圈*/
/*打印每一圈的逻辑*/
void printMatrix(int (*str)[N],int row,int col,int time)
{
int x_start,y_start,x_end,y_end;
x_start=y_start=0;
x_end = col-1;
y_end = row-1;
int i,j,k;
for(k=0;k<time;k++)
{
for(i=x_start;i<=x_end;i++) printf("%d ",str[x_start][i]);
for(j=y_start+1;j<=y_end;j++) printf("%d ",str[j][x_end]);
if(x_start < x_end && y_start < y_end){
for(i=x_end-1;i>=x_start;i--) printf("%d ",str[y_end][i]);
for(j=y_end-1;j>y_start;j--) printf("%d ",str[j][y_start]);
}
x_start++;
y_start++;
x_end--;
y_end--;
}
}
/*确定打印的圈数*/
void Print_num(int (*str)[N],int row,int col)
{
int time=0;
time = (row+1)/2>(col+1)/2?(col+1)/2:(row+1)/2;
printMatrix(str,row,col,time);
}
int main(void)
{
int str[4][3] = {{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
Print_num(str,4,3);
return 0;
}
上一篇: java开发知识点--备忘录