zoukankan      html  css  js  c++  java
  • 程序员面试题精选100题(51)顺时针打印矩阵

    部分文字摘自《程序员面试题精选100题(51)-顺时针打印矩阵  》

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

    例如:如果输入如下矩阵:

    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


    对于该题,作者举例两个就得出 “让循环继续的条件是columns > startX * 2 && rows > startY * 2”,实在不是能够理解。所以参考评论中的解答,写出如下代码。

    请重点关注二维数组作为参数的传递问题,参考《C++中用二维数组传参时形参该怎样写》

    稍微关注下二维数组的赋值初始化问题。哈哈。

    /*
    * =====================================================================================
    *
    * Filename: PrintMatrix.c
    *
    * Description:
    *
    * Version: 1.0
    * Created: 08/22/2011 01:29:46 AM
    * Revision: none
    * Compiler: gcc
    *
    * Author: YOUR NAME (),
    * Company:
    *
    * =====================================================================================
    */
    #include
    <stdio.h>
    void PrintMatric(int **arrary,int row,int column)
    {
    enum TurnDirection{Right,Down,Left,Up};
    enum TurnDirection direction = Right;
    int left = 0,
    right
    =row;
    int up = 0,
    down
    = column;
    int i=0,
    j
    =0;
    while((left < right)&&(up< down))
    {
    switch(direction)
    {
    case Right:
    {
    //打印横行
    for(i = left; i < right; ++i)
    printf(
    "%d\t",*((int *)arrary+row * j + i));
    //记录此时的Column
    --i;
    ++up;
    break;
    }
    case Down:
    {
    //打印右侧行
    for(j = up; j < down; ++j)
    printf(
    "%d\t",*((int *)arrary+row * j + i));
    --j;
    --right;
    break;
    }
    case Left:
    {
    for(i = right-1;i >=left; --i )
    printf(
    "%d\t",*((int *)arrary+row * j + i));
    ++i;
    --down;
    break;
    }
    case Up:
    {
    for(j = down; j >=up; --j)
    //printf("%d\t",arrary[i][j]);
    printf("%d\t",*((int *)arrary+row * j + i));
    ++j;
    ++left;
    break;
    }
    }
    direction
    = (++direction )%4;
    }
    printf(
    "\n\n");
    }

    int main()
    {
    int matrix[5][5] = {
    {
    1,2,3,4,5},
    {
    6,7,8,9,10},
    {
    11,12,13,14,15},
    {
    16,17,18,19,20},
    {
    21,22,23,24,25},
    };
    int i,j;
    for(i = 0; i < 5; ++i)
    for(j = 0 ; j < 5 ; ++j)
    printf(
    "%d\t",matrix[i][j]);
    printf(
    "\n");
    PrintMatric((
    int **)matrix,5,5);
    //
    return 0;
    }

      

                



  • 相关阅读:
    UEditor使用报错Cannot set property 'innerHTML' of undefined
    freemarker如何在url中传递中文参数
    freemarker字符串转换成日期和时间
    freemarker 类型转换
    内存分析工具 MAT 的使用
    Ubuntu13.04下Eclipse中文乱码解决
    自定义上下文对话框
    格局中@null的代码实现方式
    Android xml资源文件中@、@android:type、@*、?、@+含义和区别
    探讨:你真的会用Android的Dialog吗?
  • 原文地址:https://www.cnblogs.com/westfly/p/2149866.html
Copyright © 2011-2022 走看看