用c顺时针打印4X4矩阵
嗨,我正试图按顺时针方向打印一个4 x 4矩阵 输入:用c顺时针打印4X4矩阵,c,matrix,C,Matrix,嗨,我正试图按顺时针方向打印一个4 x 4矩阵 输入: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 预期产出为: 1234567891011214141516 我的代码是: int MAXR=3,MAXC=3,MINR=0,MINC=0; while(MINR < MAXR && MINC < MAXC) { for(i=MINC;i<=MAXC;i++) {
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
预期产出为:
1234567891011214141516
我的代码是:
int MAXR=3,MAXC=3,MINR=0,MINC=0;
while(MINR < MAXR && MINC < MAXC)
{
for(i=MINC;i<=MAXC;i++)
{
printf("%d ",arr[MINR][i]);
}
for(j=MINR+1;j<=MAXR;j++)
{
printf("%d ",arr[j][MAXC]);
}
for(i=MAXC-1;i>=MINC;i--)
{
printf("%d ",arr[MAXR][i]);
}
MINR++;
if((MINR%2)==0)
{
MINC=MINC+2;
}
//MAXR--;
//MAXC--;
//printf("\nMAXR=%d MINR=%d\n",MAXR,MINR);
for(j=MAXR-1;j>MINR;j--)
{
printf("%d ",arr[j][MINC]);
}
MAXR--;
MAXC--;
}
intmaxr=3,MAXC=3,MINR=0,MINC=0;
while(MINR
但产出是: 123456789101112131414161616 11 请帮我修复这个错误! 谢谢
输出为:我希望您现在已经修复了缺陷。但这是一个有趣的规范,所以这里是我的版本: gcc(gcc)4.7.3:gcc-Wall-Wextra-std=c99 spiral.c
#include <stdio.h>
int main() {
int matrix[4][4] = {
{ 1, 2, 3, 4 },
{ 12, 13, 14, 5 },
{ 11, 16, 15, 6 },
{ 10, 9, 8, 7 } };
int edge = sizeof(matrix[0]) / sizeof(int) - 1;
int i = 0;
int j = 0;
printf("%d ", matrix[i][j]);
for (int c = 0; c < edge; ++c) { printf("%d ", matrix[i][++j]); }
while (0 < edge) {
for (int c = 0; c < edge; ++c) { printf("%d ", matrix[++i][j]); }
for (int c = 0; c < edge; ++c) { printf("%d ", matrix[i][--j]); }
--edge;
for (int c = 0; c < edge; ++c) { printf("%d ", matrix[--i][j]); }
for (int c = 0; c < edge; ++c) { printf("%d ", matrix[i][++j]); }
--edge;
}
return 0;
}
#包括
int main(){
整数矩阵[4][4]={
{ 1, 2, 3, 4 },
{ 12, 13, 14, 5 },
{ 11, 16, 15, 6 },
{ 10, 9, 8, 7 } };
int-edge=sizeof(矩阵[0])/sizeof(int)-1;
int i=0;
int j=0;
printf(“%d”,矩阵[i][j]);
对于(int c=0;c
我的方法是写出
i
和j
所需更改的顺序,并找到模式。我发现模式出现在第一行之后,因此我将其作为单独的初始步骤来执行。以下代码将帮助您按顺序打印任意大小(行/列)的矩阵
void printMatrixClockwisely(int** numbers, int rows, int columns)
{
if(numbers == NULL || columns <= 0 || rows <= 0)
return;
int start = 0;
while(columns > start * 2 && rows > start * 2)
{
PrintMatrixInCircle(numbers, columns, rows, start);
++start;
}
}
void printNumber(int number)
{
printf("%d\t", number);
}
void PrintMatrixInCircle(int** numbers, int columns, int rows, int start)
{
int endX = columns - 1 - start;
int endY = rows - 1 - start;
// print a row from left to right
for(int i = start; i <= endX; ++i)
{
int number = numbers[start][i];
printNumber(number);
}
// print a col from up to down
if(start < endY)
{
for(int i = start + 1; i <= endY; ++i)
{
int number = numbers[i][endX];
printNumber(number);
}
}
// print a row from right to left
if(start < endX && start < endY)
{
for(int i = endX - 1; i >= start; --i)
{
int number = numbers[endY][i];
printNumber(number);
}
}
// print a col from down to up
if(start < endX && start < endY - 1)
{
for(int i = endY - 1; i >= start + 1; --i)
{
int number = numbers[i][start];
printNumber(number);
}
}
}
将打印矩阵锁式作废(整数**数字、整数行、整数列)
{
如果(数字==NULL | |列开始*2)
{
PrintMatrixInCircle(数字、列、行、开始);
++开始;
}
}
无效打印编号(整数编号)
{
printf(“%d\t”,数字);
}
无效打印矩阵循环(整数**数字、整数列、整数行、整数开始)
{
int endX=列-1-开始;
int endY=行-1-开始;
//从左到右打印一行
for(int i=start;i=start+1;--i)
{
整数=数字[i][start];
打印号码(数字);
}
}
}
你的调试器坏了吗?@MitchWheat和他的缩进工具也坏了…:'(如果4x4是固定的(因为您的硬件是这样的),我就不必为循环费心了,只需将16printfs
或最好是一个具有查找索引的数组…请参阅==>可能的