PTA 7-269 旋转方阵

7-269 旋转方阵
分数 10
作者 黄龙军
单位 绍兴文理学院
对于一个奇数n阶方阵,请给出经过顺时针方向m次旋转后的结果。

输入格式:
测试数据有多组,处理到文件尾。每组测试的第一行输入2个整数n,m(1<n<20,1≤m≤100),接下来输入n行数据,每行n个整数。

输出格式:
对于每组测试,输出奇数阶方阵经过m次顺时针方向旋转后的结果。每行中各数据之间留一个空格。

输入样例:
3 2
4 9 2
3 5 7
8 1 6
3 1
4 9 2
3 5 7
8 1 6
3 7
4 9 2
3 5 7
8 1 6
3 8
4 9 2
3 5 7
8 1 6
输出样例:
6 1 8
7 5 3
2 9 4
8 3 4
1 5 9
6 7 2
2 7 6
9 5 1
4 3 8
4 9 2
3 5 7
8 1 6

#include <stdio.h>
int main(){
    int n, m;
    int count = 0;
    while(~scanf("%d %d", &n, &m)){    //处理到文件尾
        int arr[n][n];
        int _arr[n][n];
        
        for(int i = 0; i < n; i++){    //遍历数组
            for(int j = 0; j < n; j++){
                scanf("%d", &arr[i][j]);
            }
        }
        
        count = m % 4;    //旋转次数
        for(int p = 1;  p <= count; p++){    //旋转次数
            // 顺时针旋转
            for(int i = 0; i < n; i++){
                for(int j = 0; j < n; j++){
                    _arr[i][j] = arr[n-1-j][i];
                }
            }
            //将旋转后的数据赋值以便再次旋转
            for(int i = 0; i < n; i++){
                for(int j = 0; j < n; j++){
                    arr[i][j] = _arr[i][j];
                }
            }
        }

        //输出数组
        for(int i = 0; i < n; i++){    //输出行
            for(int j = 0; j < n; j++){    //输出列
                if(j == n-1)
                    printf("%d\n", arr[i][j]);    //输出的每行结束不空格且换行
                else
                    printf("%d ", arr[i][j]);
            }
        }
        
    }
    
    return 0;
}

解题思路:
step1:找出其中的位置变化规律(方阵顺时针旋转90°时,每行的列号不变并向下逐次递增;每行的行号从左到右递减)
step2:用另一个辅助数组来储存将其顺时针旋转后的数据
step3:再将辅助数组的数据赋值给原来的数组(以便进行下一次旋转)
step4:输出数组即可
注:输出格式

归属知识点:
数组
循环结构

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值