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
时间: 2024-10-20 02:03:21