• Algorithm --> 顺序打印矩阵


    顺序打印矩阵

    思路

    参考代码

    #include <iostream>
    using namespace std;
    void printNumAsClockwise(int a[][4], int row, int col)
    {
        if (row < 1 || col < 1)
            return;
        int up = 0, down = row -1, left = 0, right = col -1;
        int i = 0;
        while(up <= down && left <= right)
        {
            for(i = left; i <= right; ++i)
                cout << a[up][i] << " ";
            ++up;
    
            for(i = up; i <= down; ++i)
                cout << a[i][right] << " ";
            --right;
            
            for(i = right; i >= left; --i)
                cout << a[down][i] << " ";
            --down;
    
            for(i = down; i >= up; --i)
                cout << a[i][left] << " ";
            ++left;
                
        }
        cout << endl;
    }
            
    int main()
    {
        int a[][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}};
        cout << sizeof(a) / sizeof(int) << endl;
        printNumAsClockwise(a, 4, 4);
    };

    二维数组可以用一维来代替

    #include <iostream>
    using namespace std;
    void printNumAsClockwise(int *a, int row, int col)
    {
        if (row < 1 || col < 1)
            return;
        int up = 0, down = row -1, left = 0, right = col -1;
        int i = 0;
        while(up <= down && left <= right)
        {
            for(i = left; i <= right; ++i)
                cout << a[up * col + i] << " ";
            ++up;
    
            for(i = up; i <= down; ++i)
                cout << a[i * col + right] << " ";
            --right;
            
            for(i = right; i >= left; --i)
                cout << a[down * col + i] << " ";
            --down;
    
            for(i = down; i >= up; --i)
                cout << a[i * col + left] << " ";
            ++left;
                
        }
        cout << endl;
    }
            
    int main()
    {
        int a[][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}};
        cout << sizeof(a) / sizeof(int) << endl;
        printNumAsClockwise((int*)a, 4, 4);
    };

    注意

    注意判别参数符合范围

    if (row < 1 || col < 1)
            return;

    结果

    16
    1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
  • 相关阅读:
    大四实习有点晚[转载]
    .net2.0数据绑定语法
    明天要去南京了
    Master & Content Page Relation(Event Ordering)
    在验证中使用图像和声音(ErrorMessage)
    设置FLash透明
    Basic Skill in .net2.0
    教育研究方法
    程序员是如何捕猎大象的[转]
    My lost card
  • 原文地址:https://www.cnblogs.com/jeakeven/p/4600387.html
Copyright © 2020-2023  润新知