(用C++语言)(要求多组输入)编写一个函数实现对 n*n 方阵中的每个元素循环向左移动 m(0<m<n)个位置, 即将第 0、1、……、n-1 列变为 n-m、n-m+1、……、n-1、0、1、……、n-m-1 列。 例如,3*3 的方阵中左移 1 位,即将第 0、1、2 列变为 1、2、0 列。 输入样例: 3 1 1 2 3 4 5 6 7 8 9 输出样例: 2 3 1 5 6 4 8 9 7
时间: 2023-06-20 21:07:53 浏览: 105
以下是一份C++代码,可以实现对 n*n 方阵中的每个元素循环向左移动 m 个位置的功能:
```cpp
#include <iostream>
using namespace std;
void rotateMatrix(int** matrix, int n, int m) {
// 创建一个临时数组
int* temp = new int[n];
// 对每行进行旋转
for (int i = 0; i < n; i++) {
// 将当前行保存到临时数组中
for (int j = 0; j < n; j++) {
temp[j] = matrix[i][j];
}
// 将当前行左移m个位置
for (int j = 0; j < n; j++) {
matrix[i][j] = temp[(j + m) % n];
}
}
// 释放临时数组
delete[] temp;
}
int main() {
int n, m;
cout << "请输入方阵的大小n和左移的位数m:" << endl;
cin >> n >> m;
// 创建 n*n 的二维数组
int** matrix = new int*[n];
for (int i = 0; i < n; i++) {
matrix[i] = new int[n];
}
// 读入方阵的数据
cout << "请输入方阵的数据:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix[i][j];
}
}
// 对方阵进行旋转
rotateMatrix(matrix, n, m);
// 输出旋转后的方阵
cout << "旋转后的方阵为:" << endl;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
// 释放二维数组的内存
for (int i = 0; i < n; i++) {
delete[] matrix[i];
}
delete[] matrix;
return 0;
}
```
这个程序可以处理多组输入,每组输入包括方阵的大小n和左移的位数m,以及方阵的数据。程序先创建一个 n*n 的二维数组来存储方阵的数据,然后调用 rotateMatrix 函数对方阵进行旋转。旋转完成后,程序会输出旋转后的方阵,并释放二维数组的内存。
阅读全文