旋旋旋旋旋旋旋

题目描述

给你一个 n×n 的二维数组 a,然后依次对这个二维数组执行 q 次操作,每个操作都是以下七种旋操作中的一种:

  1. 把最上面一行平移到最下面。
  2. 把最下面一行平移到最上面。
  3. 把最左边一列平移到最右边。
  4. 把最右边一列平移到最左边。
  5. 顺时针旋转 90°。
  6. 顺时针旋转 180°。
  7. 顺时针旋转 270°。

每次操作结束后,你都要输出当前的每次操作结束后,你都要输出当前的a。

输入格式

第一行,两个正整数第一行,两个正整数n, q。

接下来接下来n行,每行行,每行n个正整数,表示二维数组个正整数,表示二维数组a。

接下来一行,接下来一行,q 个值为 1∼7的正整数,表示执行操作的编号。

输出格式

共共q个二维数组,表示每次操作后的个二维数组,表示每次操作后的a。。

每个二维数组都有每个二维数组都有n行,每行行,每行n个整数。个整数。

每两个相邻的二维数组之间都要一行空行分割。每两个相邻的二维数组之间都要一行空行分割。

样例 1

输入输入

3 7
1 2 3
4 5 6
7 8 9
1 2 3 4 5 6 7

Copy

输出输出

4 5 6
7 8 9
1 2 3

1 2 3
4 5 6
7 8 9

2 3 1
5 6 4
8 9 7

1 2 3
4 5 6
7 8 9

7 4 1
8 5 2
9 6 3

3 6 9
2 5 8
1 4 7

9 8 7
6 5 4
3 2 1

Copy

样例 2

输入输入

3 3
1 1 1
2 2 2
3 3 3
1 1 1

Copy

输出输出

2 2 2
3 3 3
1 1 1

3 3 3
1 1 1
2 2 2

1 1 1
2 2 2
3 3 3

代码

#include<bits/stdc++.h>
using namespace std;
int n,q,c,a[1005][1005];
int main(){
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++)cin>>a[i][j];
        cout<<endl; 
    }
    for(int i=1;i<=q;i++){
        cin>>c;
        if(c==1){
            long long aj[1005];
            for(int j=1;j<=n;j++)aj[j]=a[1][j];
            for(int j=1;j<n;j++){
                for(int k=1;k<=n;k++)a[j][k]=a[j+1][k];
            }
            for(int j=1;j<=n;j++)a[n][j]=aj[j];
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
                cout<<endl;
            }
            cout<<endl;
        }
        else if(c==2){
        	long long aj[1005];
            for(int j=1;j<=n;j++)aj[j]=a[n][j];
            for(int j=n;j>=2;j--){
                for(int k=1;k<=n;k++)a[j][k]=a[j-1][k];
            }
            for(int j=1;j<=n;j++)a[1][j]=aj[j];
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
                cout<<endl;
            }
            cout<<endl;
		}
		else if(c==3){
			long long aj[1005];
            for(int j=1;j<=n;j++)aj[j]=a[j][1];
            for(int j=1;j<n;j++){
                for(int k=1;k<=n;k++)a[k][j]=a[k][j+1];
            }
            for(int j=1;j<=n;j++)a[j][n]=aj[j];
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
                cout<<endl;
            }
            cout<<endl;
		}
		else if(c==4){
			long long aj[1005];
            for(int j=1;j<=n;j++)aj[j]=a[j][n];
            for(int j=n;j>=2;j--){
                for(int k=1;k<=n;k++)a[k][j]=a[k][j-1];
            }
            for(int j=1;j<=n;j++)a[j][1]=aj[j];
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
                cout<<endl;
            }
            cout<<endl;
		}
		else if(c==5){
			long long aj[1005][1005],ki=1,kj=1;
			for(int j=1;j<=n;j++){
                for(int k=n;k>=1;k--){
                    aj[ki][kj]=a[k][j];
                    kj++;
                }
                ki++;
                kj=1;
            }
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)a[j][k]=aj[j][k];
            }
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
                cout<<endl;
            }
            cout<<endl;
		}
		else if(c==6){
			long long aj[1005][1005],ki=1,kj=1;
			for(int j=1;j<=n;j++){
                for(int k=n;k>=1;k--){
                    aj[ki][kj]=a[k][j];
                    kj++;
                }
                ki++;
                kj=1;
            }
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)a[j][k]=aj[j][k]; 
            }
            ki=1;
            kj=1;
            for(int j=1;j<=n;j++){
                for(int k=n;k>=1;k--){
                    aj[ki][kj]=a[k][j];
                    kj++;
                }
                ki++;
                kj=1;
            }
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)a[j][k]=aj[j][k];
            }
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
                cout<<endl;
            }
            cout<<endl;
		}
		else if(c==7){
			long long aj[1005][1005],ki=1,kj=1;
			for(int j=1;j<=n;j++){
                for(int k=n;k>=1;k--){
                    aj[ki][kj]=a[k][j];
                    kj++;
                }
                ki++;
                kj=1;
            }
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)a[j][k]=aj[j][k];
            }
            ki=1;
            kj=1;
            for(int j=1;j<=n;j++){
                for(int k=n;k>=1;k--){
                    aj[ki][kj]=a[k][j];
                    kj++;
                }
                ki++;
                kj=1;
            }
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)a[j][k]=aj[j][k];
            }
            ki=1;
            kj=1;
            for(int j=1;j<=n;j++){
                for(int k=n;k>=1;k--){
                    aj[ki][kj]=a[k][j];
                    kj++;
                }
                ki++;
                kj=1;
            }
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)a[j][k]=aj[j][k];
            }
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++)cout<<a[j][k]<<" ";
                cout<<endl;
            }
            cout<<endl;
		}
    }
}

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值