编写C++函数 rotateLeft,该函数实现对一个n×n方阵中的每个元素循环向左移m个位置(0<m<n),即将第0、1、……、n−1列变换为第n−m、n−m+1、……、n−1、0、1、……、n−m−1列。
时间: 2023-11-30 18:03:04 浏览: 119
数组循环左移 c++实现
可以使用一个辅助数组来完成这个操作。首先,我们将每个元素先保存到辅助数组中,然后再将辅助数组的元素赋值回原来的数组中。具体实现如下:
```c++
void rotateLeft(int arr[][N], int n, int m) {
int temp[N];
for (int i = 0; i < n; i++) {
// 将第 i 列的元素保存到辅助数组中
for (int j = 0; j < n; j++) {
temp[j] = arr[j][i];
}
// 将辅助数组向左移动 m 个位置
for (int j = 0; j < n; j++) {
arr[(j + n - m) % n][i] = temp[j];
}
}
}
```
其中,`arr` 表示要旋转的方阵,`n` 表示方阵的大小,`m` 表示向左移动的位置数。在函数中,我们先定义一个长度为 `N` 的辅助数组 `temp`,用来暂存每列的元素。接着,我们遍历每一列,将该列的元素保存到 `temp` 数组中。然后,我们再遍历 `temp` 数组,将每个元素向左移动 `m` 个位置,最后将移动后的元素赋值回原来的数组中即可。注意,在移动元素时需要使用取模操作,确保元素不越界。
示例代码可以参考以下链接:https://github.com/wx-chevalier/CPP-DataStructure-Algorithm/blob/master/src/ch05-Array/exercise/05-20.cpp
阅读全文