这是第一次测评的代码:
#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][n];
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;
}