【回型矩阵】为什么行数>列数的时候这个代码能输出正确结果但是行数<列数的时候输出结果就错误了?
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
#define M 5 //矩阵行数
#define N 7 //矩阵列数
int matrix[M][N] = { 0 };
int row = 0;
int col = 0;
int start = 1; //起始值
int m = M;
int n = N;
//可以画N/2个圈
for (int count = 0; count < N / 2; count++)
{
for (col=count; col < n - 1; col++) //a排赋值
{
matrix[row][col] = start++;
}
for (row=count; row < m - 1; row++) //b排赋值
{
matrix[row][col] = start++;
}
for (col = n - 1; col > count; col--) //c排赋值
{
matrix[row][col] = start++;
}
for (row = m - 1; row > count; row--) //d排赋值
{
matrix[row][col] = start++;
}
//进入下一圈
m--;
n--;
row++;
start--; //这里是因为在换圈的时候会多加1
}
if (N % 2 != 0) //如果size为奇数则最后中间那一个数遍历不到,这里补上
{
int z = M - 2 * row;
for (int i = 0; i < z; ++i)
matrix[row++][col + 1] = ++start;
}
//输出数组
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
cout << setw(3) << matrix[i][j];//设定输出宽度为3
}
cout << endl;
}
return 0;
}
回答
行数>列数你的程序也不对
8行7列你的程序输出如下
1 2 3 4 5 6 7 26 26 27 28 29 30 8
25 43 43 44 45 31 9
24 42 52 53 46 32 10
23 41 51 54 47 33 11
22 40 50 49 48 34 12
21 39 38 37 36 35 13
20 19 18 17 16 15 14
你看到2个26,2个43了么
你想复杂了,直接这么绕圈,遇到边界或者已经填充(不为0)就转弯,即可。
#include <iostream>#include <cstring>
#include <iomanip>
using namespace std;
int main()
{
#define M 8 //矩阵行数
#define N 7 //矩阵列数
int matrix[M][N] = { 0 };
memset(matrix, 0, M*N);
int i = 0, j = 0;
int di = 0, dj = 1;
int a = 1;
while (a <= M * N)
{
matrix[i][j] = a++;
if (di == 0 && dj == 1)
{
if (j >= N - 1 || matrix[i][j + 1] != 0)
{
di = 1; dj = 0;
}
}
else if (di == 1 && dj == 0)
{
if (i >= M - 1 || matrix[i + 1][j] != 0)
{
di = 0; dj = -1;
}
}
else if (di == 0 && dj == -1)
{
if (j <= 0 || matrix[i][j - 1] != 0)
{
di = -1; dj = 0;
}
}
else
{
if (i <= 0 || matrix[i - 1][j] != 0)
{
di = 0; dj = 1;
}
}
i += di;
j += dj;
}
//输出数组
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
cout << setw(3) << matrix[i][j];//设定输出宽度为3
}
cout << endl;
}
return 0;
}
以上是 【回型矩阵】为什么行数>列数的时候这个代码能输出正确结果但是行数<列数的时候输出结果就错误了? 的全部内容, 来源链接: utcz.com/a/45879.html