顺时针打印矩阵

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺时针打印矩阵相关的知识,希望对你有一定的参考价值。

P128顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵:

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

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>  
#include<stdlib.h>  
void printMatrix(int **matrix, int columns, int rows, int start)
{
int x = columns - start - 1;
int y = rows - start - 1;
int i;
for (i = start; i <= x; i++)//先打印一行  
printf("%d ", matrix[start][i]);
if (start<y)//从上往下  
{
for (i = start + 1; i <= y; i++)
printf("%d ", matrix[i][x]);
}
if (x>start&&y>start)//从右到左打印  
{
for (i = x - 1; i >= start; i--)
printf("%d ", matrix[y][i]);
}
if (x>start&&y>start + 1)//从下到上打印  
{
for (i = y - 1; i >= start + 1; i--)
printf("%d ", matrix[i][start]);
}
 
}
//循环结束的条件
void matrixClock(int **matrix, int columns, int rows)
{
if (matrix == NULL || columns <= 0 || rows <= 0)
return;
int start = 0;
while (columns>start * 2 && rows>start * 2)
{
printMatrix(matrix, columns, rows, start);
start++;
}
}
 
int main()
{
int n, m;
while (scanf("%d %d", &n, &m) != NULL)
{
int **numbers;
int i, j;
numbers = (int **)malloc(sizeof(int *)*n);//n rows  
for (i = 0; i<n; i++)
numbers[i] = (int *)malloc(sizeof(int)*m);//m columns  
for (i = 0; i<n; i++)
for (j = 0; j<m; j++)
scanf("%d", &numbers[i][j]);
matrixClock(numbers, m, n);
}
system("pause");
return 0;
}

结果:

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


以上是关于顺时针打印矩阵的主要内容,如果未能解决你的问题,请参考以下文章

顺时针打印矩阵

剑指offer--29顺时针打印矩阵

剑指offer 19.顺时针打印矩阵

顺时针打印矩阵

剑指offer:顺时针打印矩阵

剑指 Offer 29. 顺时针打印矩阵 的 详细题解