1 solutions

  • 1
    @ 2026-6-11 18:01:25

    P1012 帮帮flying吧

    一.解题思路

    1.碎碎念

    在这里,我要狠狠的开喷出题人了,what are you 弄啥嘞!

    什么叫 m行n列 !!!正常人不都是输入 n行m列 吗?!你知道就因为这个我debug了将近一个小时吗😭

    你不准出题**@demon**了,你出的好反人类!!!

    2.题目分析

    一道矩阵变换题,做法其实挺多的,这里我就讲一下最方便的一种解法吧——直接按照题目的要求输出原数组即可

    怎么做捏,其实很简单,现在看到这还没有思路的人立刻拿出纸笔或者平板,把这个样例和样例输出写出来

    然后捏,观察!没错,瞪眼法

    注意到! 输出的结果顺序是从原数组左下角向上输出,然后换到下一列,以此类推

    那么现在显而易见了,我们只需要模拟这个顺序输出就好了,完全不需要做任何改动

    理论存在,实践开始!

    3.算法实现

    ?这咋说,你就照着输出呗,还有啥讲的,这个不会罚你去刷cpp入门题单!

    开玩笑还是讲一下吧

    我们只需要让数据从左下角开始读,一直读到左上角即可

    也就是

    for(int j = 0;j<n;++j){
            for(int i = m-1;i>=0;--i){
                cout<<num[i][j]<<' ';
            }
            cout<<'\n';
        }
    

    好了别看了真没啥好讲了

    4.复杂度

    1.时间:O(m × n)

    2.空间:O(m × n)

    二.完整代码

    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    
    signed main(){
    
        ios::sync_with_stdio(false);
        cin.tie(0);
        cout.tie(0);
    
        int m,n;
        cin>>m>>n;
        vector<vector<int>> num(m,vector<int>(n));
        for(int i = 0;i<m;++i){
            for(int j = 0;j<n;++j){
                cin>>num[i][j];
            }
        }
        
        for(int j = 0;j<n;++j){
            for(int i = m-1;i>=0;--i){
                cout<<num[i][j]<<' ';
            }
            cout<<'\n';
        }
        
        return 0;
    }
    

    PS:非专业题解!有任何错误记得联系我!!!

    Information

    ID
    13
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    2
    Tags
    (None)
    # Submissions
    8
    Accepted
    7
    Uploaded By