【发布时间】:2022-01-18 11:54:55
【问题描述】:
// printing in spiral order matrix
#include<iostream>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int arr[n][m];
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cin>>arr[i][j];
}
}
// print
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cout<<arr[i][j]<<" ";
}
cout<<endl;
}
// spiral print
int row_start=0,row_end=n-1,col_start=0,col_end=m-1;
while(row_start<=row_end && col_start<=col_end){
for(int j=col_start; j<=col_end; j++){
cout<<arr[row_start][j]<<" ";
}
row_start++;
for(int i=row_start; i<=row_end; i++){
cout<<arr[i][col_end]<<" ";
}
col_end--;
for(int j=col_end; j>=col_start; j--){
cout<<arr[row_end][j]<<" ";
}
row_end--;
for(int i=row_end; i>=row_start; i--){
cout<<arr[i][col_start]<<" ";
}
col_start++;
}
return 0;
}
我的输出是:
PS C:\Users\anmol\Desktop\c++projectwork> ./a
3 4
1 2 3 4 5 6 7 8 9 0 1 2
1 2 3 4
5 6 7 8
9 0 1 2
1 2 3 4 8 2 1 0 9 5 6 7 6
最后我得到一个额外的“6”。 这不是必需的,但是只有当矩阵是矩形时才会出现这种类型的问题。 但代码适用于方阵。 请告诉我哪里出错了..
【问题讨论】:
-
您是否使用调试器运行过代码以查明问题所在?
-
int arr[n][m];不是标准 C++。避免使用非标准结构。 -
你试过使用调试器吗?我建议尝试使用 1 行 5 列的矩阵。
-
回避这个问题的一个简单方法是计算你输出的元素数量。一旦你到达
n*m,就停下来。