矩阵螺旋输出
2018-01-15 16:02
246 查看
这是第一次测评的代码:
#include <iostream> using namespace std; int main() { int matrix[100][100]; int m; int n; while(cin >> m >> n){ for(int i = 0; i < m; ++i){ for(int j = 0;j < n; ++j){ cin >> matrix[i][j]; } } int t; //while中专用来控制循环的一个变量 int i = 0, p = 0; //j的初始值表示一共有多少列 , p是行 int j = n, q = m; //q的初始值表示一共有多少行 ,i是列 while(i < j -1 || p <= q - 1){ //while的条件为重点 //输出每次输出后形成矩阵的第一行 ,即第p行 for(t = i; t < j; t++){ if(t != 0){ cout << " "; } cout << matrix[p][t]; } p++; //输出每次输出后形成矩阵的最后一列,即第j行 for(t = p; t < q; t++){ cout << " "; cout << matrix[t][j - 1]; } j--; //输出每次输出后形成矩阵的最后一行,即第q行 for(t = j - 1; t >= i; t--){ cout << " "; cout << matrix[q - 1][t]; } q--; //输出每次输出后形成矩阵的第一列 ,即第i行 for(t = q - 1; t >= p; t--){ cout << " "; cout << matrix[t][i]; } i++; } } return 0; }
显然,代码有问题,于是通过画图进行分析。
写时,会出现一种把已输出的元素再输出一遍的情况,因为个人水平有限,只好另引进一个二位 数组,记录是否曾经输出过这个二维数组的某个元素。
#include <iostream> using namespace std; int main() { int matrix[100][100]; int m; int n; while(cin >> m >> n){ for(int i = 0; i < m; ++i){ for(int j = 0;j < n; ++j){ cin >> matrix[i][j]; } } int matP[m] ; for(int i = 0; i < m; ++i){ for(int j = 0;j < n; ++j){ matP[i][j] = 1; } } int t; //while中专用来控制循环的一个变量 int i = 0, p = 0; //j的初始值表示一共有多少列 , p是行 int j = n - 1, q = m - 1; //q的初始值表示一共有多少行 ,i是列 while((i <= j || p <= q) && (j >= 0) && (q >= 0) ){ //while的条件为重点 //输出每次输出后形成矩阵的第一行 ,即第p行 for(t = i; t <= j; t++){ if(matP[p][t] == 1){ if(t != 0){ cout << " "; } matP[p][t] = 0; cout << matrix[p][t]; } } p++; //输出每次输出后形成矩阵的最后一列,即第j列 for(t = p; t <= q; t++){ if(matP[t][j] == 1){ matP[t][j] = 0; cout << " "; cout << matrix[t][j]; } } j--; //输出每次输出后形成矩阵的最后一行,即第q行 for(t = j; t >= i; t--){ if(matP[q][t] == 1){ cout << " "; matP[q][t] = 0; cout << matrix[q][t]; } } q--; //输出每次输出后形成矩阵的第一列 ,即第i行 for(t = q; t >= p; t--){ if(matP[t][i] == 1){ cout << " "; matP[t][i] = 0; cout << matrix[t][i]; } } i++; } } return 0; }
测评通过!完事大吉!
后看到另一种写法,贴出以供学习:
下为博客的地址,此为出处:
博客园:矩阵螺旋输出:
代码在下:
#include <iostream> using namespace std; int main() { int matrix[100][100]; int m; int n; int l = 1, i, j, k; while(cin >> m >> n){ for (i = 0; i<m; i++) { for (j = 0; j<n; j++) { cin >> matrix[i][j]; } } k = 0; i = 0; j = 0; for (;;) { for (; j<n - i; j++) { cout << matrix[i][j]; k++; if (k == m*n) break; else cout<<" "; if (j == n - i - 1) { i++; l = 2; break; } } if (k == m*n) break; for (; i<m - n + 1 + j; i++) { cout << matrix[i][j] ; k++; if (k == m*n) break; else cout<<" "; if (i == m - n + j) { j--; l = 3; break; } } if (k == m*n) break; for (; j >= m - 1 - i; j--) { cout << matrix[i][j] ; k++; if (k == m*n) break; else cout<<" "; if (j == m - i-1) { i--; l = 4; break; } } if (k == m*n) break; for (; i>j; i--) { cout << matrix[i][j]; k++; if (k == m*n) break; else cout<<" "; if (i == j + 1) { j++; l = 1; break; } } if (k == m*n) break; } } return 0; }
相关文章推荐