1 条题解

  • 0
    @ 2025-8-24 21:07:21

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar ImposterAnYu
    I love barbara forever! | q3572195459 wx rzbxs3288,要电话请私信

    搬运于2025-08-24 21:07:20,当前版本为作者最后更新于2021-07-03 15:56:00,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    开篇话

    这道题乍一看还挺难的,但是发现方法后就好办了。

    简便做法

    首先开一个二维数组 a105,105a_{105,105}我的前教练告诉我,数组开得比数据范围大 55 是个好习惯)。

    这道题让我们将读入的二维数组(即图像)顺时针旋转 9090 度以后输出。但是如果我们真的写一个这样的程序的话会十分麻烦,那有没有简便的写法呢?答案是肯定的!那具体怎么简便呢?

    我们设样例的输入为:

    a[1][1] a[1][2] a[1][3]
    a[2][1] a[2][2] a[2][3]
    a[3][1] a[3][2] a[3][3]
    

    那么,想要得到样例输出的话,就要:

    1.每次先将图像做左右对称处理,得到下图↓

    a[1][3] a[1][2] a[1][1]
    a[2][3] a[2][2] a[2][1]
    a[3][3] a[3][2] a[3][1]
    

    2.再将 ii(前下标) 和 jj(后下标) 换过来,就可以得到输出!

    a[3][1] a[2][1] a[1][1]
    a[3][2] a[2][2] a[1][2]
    a[3][3] a[2][3] a[1][3]
    

    3.用代码实现,就是:

    for(i = 1; i <= m; i++){
            for(j = n; j >= 1; j--) cout<< a[j][i] << " " ;
    		cout<< endl;
        }
    

    AC code

    #include <bits/stdc++.h>//万能头文件(但不是彻底万能的)
    using namespace std; 
    int m,n,a[105][105],i,j;
    int main(){
        cin >> n >> m;
        for(i = 1; i <= n; i++)
            for(j = 1; j <= m; j++) cin >> a[i][j];//读入二维数组里的每一个元素。 
        for(i = 1; i <= m; i++){
            for(j = n; j >= 1; j--) cout<< a[j][i] << " " ;//将图像顺时针旋转 90 度输出。 
    		cout<< endl;
        }
        return 0; 
    }
    
    • 1

    信息

    ID
    6964
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    1
    已通过
    1
    上传者