您的位置:首页 > 其它

矩阵螺旋输出

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: