剑指offer 面试题20 顺时针打印矩阵
2014-08-31 21:37
405 查看
E:\arithmetic\PrintRotateArray
思路:以圈为单位打印(k),每圈又分4部分。计算好每圈的起始位置((k,k)),和每圈每部分的终止条件。
注意:1.二维数组的传参。2.宏定义加括号。3。临界终止条件。
思路:以圈为单位打印(k),每圈又分4部分。计算好每圈的起始位置((k,k)),和每圈每部分的终止条件。
注意:1.二维数组的传参。2.宏定义加括号。3。临界终止条件。
#include <stdio.h> #define MIN(a, b) ( (a) < (b) ? a : b ) void printArray(int **arr, int row, int col); int main(int argc, char *argv[]) { int arr[4][4]; int i = 0 , j = 0; for(i = 0 ; i<4; i++){ for(j=0 ; j<4 ; j++){ arr[i][j] = 4*i+j ; } } int arr2[5][4]; for(i = 0 ; i<5; i++){ for(j=0 ; j<4 ; j++){ arr2[i][j] = 4*i+j ; } } printf("row = %d \t, col = %d\n", sizeof(arr2)/sizeof(int), sizeof(arr2[0])/sizeof(int));//20 4看来在内存中是当成一维数组 int arr3[5][5]; for(i = 0 ; i<5; i++){ for(j=0 ; j<5 ; j++){ arr3[i][j] = 5*i+j ; } } printArray(arr3, 5, 5); return 0; } void printArray(int **arr, int row, int col){ int m, n, k; m = 0; n = 0; k = 0; while(k<(float)(MIN(row, col) / 2.0)){ // printf("*********%d\n", k); m = k; n = k; while(n<col-k){ // printf("%d\t", arr[m] ); printf("%d\t", *(arr+m*row+n)); n++; } n--;//!!!!! 别忘了!!! m++; while(m<row-k){ // printf("%d\t", arr[m] ); printf("%d\t", *(arr+m*row+n)); m++; } m--;//!!!!! n--; while(n>=k){ // printf("%d\t", arr[m] ); printf("%d\t", *(arr+m*row+n)); n--; } n++;//!!!!! m--; while(m>=k+1){ // printf("%d\t", arr[m] ); printf("%d\t", *(arr+m*row+n)); m--; } k++; } }
相关文章推荐
- 剑指offer-面试题20.顺时针打印矩阵
- 【剑指offer】面试题20:顺时针打印矩阵
- 剑指Offer面试题20顺时针打印矩阵,面试题21包含min函数的栈
- 剑指 offer面试题20 顺时针打印矩阵
- 【剑指offer】面试题20:顺时针打印矩阵
- 剑指offer之面试题20:顺时针打印矩阵
- 剑指Offer之面试题20:顺时针打印矩阵
- 剑指offer面试题20 顺时针打印矩阵
- 剑指offer——面试题20:顺时针打印矩阵
- 【剑指offer】4.2画图让抽象问题形象化——面试题20:顺时针打印矩阵
- 剑指offer-面试题 20:顺时针打印矩阵
- 剑指Offer面试题20:顺时针打印矩阵 Java实现
- 剑指offer——面试题20:顺时针打印矩阵
- 【面试题】剑指offer20--顺时针打印一个矩阵的数字
- 剑指offer面试题20-顺时针打印矩阵
- 剑指Offer面试题20(Java版):顺时针打印矩阵
- Java 剑指offer_面试题20_顺时针打印矩阵(思路在一步步分解之中)
- 剑指offer-4-面试题20:顺时针打印矩阵(画图使抽象问题形象化)
- 剑指offer面试题20:顺时针打印矩阵
- [剑指offer]面试题20:顺时针打印矩阵