本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。 输入格式: 输入第一行给出两个正整数m和n(1≤n≤6)。接下来一共n行,每行n个整数,表示一个n阶的方阵。 输出格式: 按照输入格式输出移动后的方阵:即输出n行,每行n个整数,每个整数后输出一个空格。 输入样例: 2 3 1 2 3 4 5 6 7 8 9 输出样例: 2 3 1 5 6 4 8 9 7
时间: 2023-05-31 12:17:57 浏览: 164
将一个整数S随机拆分为N个在min~max之间的整数.txt
### 回答1:
题目要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0∼1、⋯、n−1列变为第m∼m+1、⋯、n−1、0∼m−1列,即第0∼m−1列移到第n−m∼n−1列,第m∼n−1列移到第0∼n−m−1列,n为方阵的行数,m为移动的位数。
输入格式:
输入第一行给出正整数n和m,其中2≤n≤6, 0≤m≤n−1。
接下来n行,每行给出n个整数,表示一个n×n的方阵。
输出格式:
在一行中输出移动后的n×n方阵,相邻数字以空格分隔,每行末尾不得有多余空格。
### 回答2:
思路:
题目要求将矩阵的每个元素循环向右移动m个位置,可以将每一行拆分成移动和不移动两个部分,然后进行拼接即可。需要注意的是,若m大于等于n,则实际上向右移动m个位置等价于向右移动m%n个位置,因此m需要取模才能得到实际的移动位数。
代码:
### 回答3:
题目描述
给定一个n×n方阵,将其每个元素循环向右移m个位置,即将第0、1、…、n-1列变换为第n-m、n-m+1、…、n-1、0、1、…、n-m-1列。
输入格式:
输入第一行给出两个正整数m和n(1≤n≤6)。接下来一共n行,每行n个整数,表示一个n阶的方阵。
输出格式:
按照输入格式输出移动后的方阵:即输出n行,每行n个整数,每个整数后输出一个空格。
输入样例:
2 3
1 2 3
4 5 6
7 8 9
输出样例:
2 3 1
5 6 4
8 9 7
算法1
一种非常递归的做法
先处理第一层(最外围),然后递归处理里面的(里面即较大的一个矩阵)
先暴力做,把最上面的一层都记录下来
然后循环整个矩阵,把右边一列放到上面去,下边一列放到右边去,左边一列放到下面去,上面一列放到左边去
最后一行,操作完毕后,依然需要将最后一列处理一下
C++ 代码
算法2
找规律
可以发现,旋转矩阵的过程实际上是改变了矩阵中每个元素的行列坐标
即, 设原矩阵中 最左边列的列编号为0, 最右边列的列编号为n-1,则
旋转后,最左边的列的列编号变为 n-m,最右边的列的列编号变为 n-m-1
0 maps to n-m
1 maps to n - m + 1
2 maps to n - m + 2
...
n - m - 1 maps to n - 1
剩下的列的列编号,相应地加上m,即i+m,模n即可
C++ 代码
阅读全文