用c顺时针打印4X4矩阵

用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++) {

嗨,我正试图按顺时针方向打印一个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++)
        {
            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是固定的(因为您的硬件是这样的),我就不必为循环费心了,只需将16
printfs
或最好是一个具有查找索引的数组…请参阅==>可能的