C++实现矩阵向左旋转90度代码运行结果与预期不符问题求助
问题分析
- 核心逻辑错误:当前代码仅实现了矩阵转置操作,没有完成逆时针(向左)旋转90度的坐标映射逻辑
- 预期结果笔误:你给出的预期结果第二行最后一个值
6是笔误,3*3矩阵[[1,2,3],[4,5,6],[7,8,9]]向左旋转90度的正确结果为[[7,4,1],[8,5,2],[9,6,3]] - 语法兼容性问题:代码中使用的变长数组
int matrix[size][size]不属于C++标准语法,仅部分编译器提供扩展支持,生产环境建议替换为vector等标准容器
修复方案
左旋转90度的坐标映射规则为:对于n阶矩阵,新矩阵第i行第j列的元素,等于原矩阵第n-1-j行第i列的元素,对应赋值语句为tempMatrix[i][j] = matrix[size - 1 - j][i];,直接替换原有转置逻辑的赋值语句即可得到正确结果。
修改后完整代码
#include <iostream> #include <vector> using namespace std; int main(){ int size; cin>>size; // 替换变长数组为标准vector,兼容性更好 vector<vector<int>> matrix(size, vector<int>(size)); for(int i=0;i<size;i++){ for(int j=0;j<size;j++){ cin>>matrix[i][j]; } } cout<<"Original Matrix"<<endl; for(int i=0;i<size;i++){ for(int j=0;j<size;j++){ cout<<matrix[i][j]<<" "; } cout<<endl; } cout<<"After left rotating"<<endl; vector<vector<int>> tempMatrix(size, vector<int>(size)); // 替换为左旋转90度的坐标映射逻辑 for(int i=0;i<size;i++){ for(int j=0;j<size;j++){ tempMatrix[i][j] = matrix[size - 1 - j][i]; } } for(int i=0;i<size;i++){ for(int j=0;j<size;j++){ cout<<tempMatrix[i][j]<<" "; } cout<<endl; } return 0; }
输入输出示例
输入:
3 1 2 3 4 5 6 7 8 9
输出:
Original Matrix 1 2 3 4 5 6 7 8 9 After left rotating 7 4 1 8 5 2 9 6 3
内容的提问来源于stack exchange,提问作者CR28
相关产品推荐
相关产品推荐

