|
1 | 1 | #include <stdio.h> |
2 | 2 | #include <stdlib.h> |
3 | 3 |
|
4 | | -static void rotate(int** matrix, int matrixRowSize, int matrixColSize) |
| 4 | +static void rotate(int** matrix, int matrixSize, int *matrixColSize) |
5 | 5 | { |
6 | 6 | int i, j; |
7 | | - if (matrixRowSize != matrixColSize) { |
8 | | - return; |
9 | | - } |
10 | | - |
11 | | - for (i = 0; i < matrixRowSize / 2; i++) { |
12 | | - int low = i, high = matrixColSize - i - 1; |
| 7 | + for (i = 0; i < matrixSize / 2; i++) { |
| 8 | + int col_size = matrixColSize[i]; |
| 9 | + int low = i, high = col_size - i - 1; |
13 | 10 | for (j = low; j < high; j++) { |
14 | 11 | int tmp = matrix[i][j]; |
15 | | - matrix[i][j] = matrix[matrixColSize - 1 - j][i]; |
16 | | - matrix[matrixColSize - 1 - j][i] = matrix[matrixRowSize - 1 - i][matrixColSize - 1 - j]; |
17 | | - matrix[matrixRowSize - 1 - i][matrixColSize - 1 - j] = matrix[j][matrixRowSize - 1 - i]; |
18 | | - matrix[j][matrixRowSize - 1 - i] = tmp; |
| 12 | + matrix[i][j] = matrix[col_size - 1 - j][i]; |
| 13 | + matrix[col_size - 1 - j][i] = matrix[matrixSize - 1 - i][col_size - 1 - j]; |
| 14 | + matrix[matrixSize - 1 - i][col_size - 1 - j] = matrix[j][matrixSize - 1 - i]; |
| 15 | + matrix[j][matrixSize - 1 - i] = tmp; |
19 | 16 | } |
20 | 17 | } |
21 | 18 | } |
22 | 19 |
|
23 | 20 | int main(int argc, char **argv) |
24 | 21 | { |
25 | | - if (argc != 3) { |
26 | | - fprintf(stderr, "Usage: ./test 3 3\n"); |
| 22 | + if (argc != 2) { |
| 23 | + fprintf(stderr, "Usage: ./test 3\n"); |
27 | 24 | } |
28 | 25 |
|
29 | 26 | int i, j, count = 0; |
30 | 27 | int row_size = atoi(argv[1]); |
31 | | - int col_size = atoi(argv[2]); |
| 28 | + int *col_sizes = malloc(row_size * sizeof(int)); |
32 | 29 | int **matrix = malloc(row_size * sizeof(int *)); |
33 | 30 | for (i = 0; i < row_size; i++) { |
34 | | - matrix[i] = malloc(col_size * sizeof(int)); |
35 | | - for (j = 0; j < col_size; j++) { |
| 31 | + col_sizes[i] = row_size; |
| 32 | + matrix[i] = malloc(col_sizes[i] * sizeof(int)); |
| 33 | + for (j = 0; j < col_sizes[i]; j++) { |
36 | 34 | matrix[i][j] = ++count; |
37 | 35 | printf("%d ", matrix[i][j]); |
38 | 36 | } |
39 | 37 | printf("\n"); |
40 | 38 | } |
41 | 39 |
|
42 | | - rotate(matrix, row_size, col_size); |
43 | | - for (i = 0; i < col_size; i++) { |
44 | | - for (j = 0; j < row_size; j++) { |
| 40 | + rotate(matrix, row_size, col_sizes); |
| 41 | + for (i = 0; i < row_size; i++) { |
| 42 | + for (j = 0; j < col_sizes[i]; j++) { |
45 | 43 | printf("%02d ", matrix[i][j]); |
46 | 44 | } |
47 | 45 | putchar('\n'); |
|
0 commit comments