#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;
}
【回型矩阵】为什么行数>列数的时候这个代码能输出正确结果但是行数<列数的时候输出结果就错误了?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- threenewbee 2020-09-24 01:36关注
行数>列数你的程序也不对
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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码