题目描述 输入一个 n 行 m 列的黑白图像,将它顺时针旋转 90 度后输出。 输入格式 第一行包含两个整数 n 和 m,表示图像包含像素点的行数和列数。1≤n≤100,1≤m≤100。 接下来 n 行,每行 m 个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在 0∼255 之间。 输出格式 m 行,每行 n 个整数,为顺时针旋转 90 度后的图像。相邻两个整数之间用单个空格隔开。c++
时间: 2025-03-09 07:06:15 浏览: 123
为了完成这个题目,我们需要编写一段 C++ 程序来处理图像数据,并按照要求将其顺时针旋转 90 度。下面是一个完整的解决方案:
### 解决方案步骤
1. **读取输入**:首先需要从标准输入读入图像矩阵的大小 `n` 和 `m`,然后逐行读取每个像素值。
2. **创建一个新的矩阵用于存储旋转后的结果**:由于原始图像是 n 行 m 列,所以新的图像会变成 m 行 n 列。
3. **填充新矩阵**:通过遍历旧矩阵并依据坐标变换规则 `(i, j)` 转换到`(j, 新宽度 - i - 1)` 来确定对应位置的新值。
4. **打印输出**:最后按指定格式输出新生成的矩阵。
以下是具体的代码实现示例:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
// Step 1: Read dimensions of the original matrix.
cin >> n >> m;
vector<vector<int>> image(n, vector<int>(m));
// Step 2: Input values into the matrix.
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cin >> image[i][j];
}
}
// Create a new rotated matrix with swapped dimensions.
vector<vector<int>> rotated(m, vector<int>(n));
// Rotate and fill in the elements to their correct positions after rotation.
for (int i = 0; i < n; ++i){
for(int j = 0; j < m; ++j){
rotated[j][n-i-1] = image[i][j]; // Note this line carefully!
}
}
// Output the newly formed rotated matrix row by row.
for(const auto &row : rotated){
for(size_t k=0;k<row.size();k++){
if(k>0)
cout << " ";
cout << row[k];
}
cout << endl;
}
return 0;
}
```
这段程序实现了对给定二维数组(即黑白图像)进行了顺时针方向上 90 度的角度翻转操作。注意这里的关键在于理解如何映射原数组中的每一个元素至其应在的目标位置;特别是当我们将行列互换了以后,每一行都要反向插入到目标数组当中去。
阅读全文
相关推荐
















