【回型矩阵】为什么行数>列数的时候这个代码能输出正确结果但是行数<列数的时候输出结果就错误了?

图片说明

#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;

}

以上是 【回型矩阵】为什么行数&gt;列数的时候这个代码能输出正确结果但是行数&lt;列数的时候输出结果就错误了? 的全部内容, 来源链接: utcz.com/a/45879.html

回到顶部