C 以特殊格式输出一些值

C 以特殊格式输出一些值,c,C,我正在努力解决一些问题。但是我的代码有点问题。 问题是:给定一个数字n,按以下格式输出n*n 输入: n=3 输出: 7 8 1 6 9 2 5 4 3 这是我的代码:(我知道其中有一些bug,但我无法修复。如果你有更好的想法,请帮助我。) 先谢谢你 #include<stdio.h> #include<stdlib.h> void oput(int **matrix,int n); int main() { int x=0,y=0,n,k=1;

我正在努力解决一些问题。但是我的代码有点问题。 问题是:给定一个数字n,按以下格式输出n*n

输入:

n=3
输出:

 7 8 1 
 6 9 2 
 5 4 3
这是我的代码:(我知道其中有一些bug,但我无法修复。如果你有更好的想法,请帮助我。) 先谢谢你

#include<stdio.h>
#include<stdlib.h>
void oput(int **matrix,int n);
int main()
{   int x=0,y=0,n,k=1;
    scanf("%d",&n);
    int **matrix = malloc(sizeof(int)*n*n);
    if(matrix==NULL)
    {
        perror("can't allocate");
        return 1;
    }
    //Input values to x*y matrix
   while(n>=1)
    {
      for(x=0,y=n-1;x<n;x++)
      {
          matrix[x][y]=k++;
      }
      for(x=n-1,y=n-1;y>=0;y--)
      {
          matrix[x][y]=k++;
      }
      for(x=n-1,y=0;x>=0;x--)
      {
          matrix[x][y]=k++;
      }
      n--;
      }
      oput(matrix,n);
      free(matrix);
      return 0;
}
//output values by row.
void oput(int **matrix,int n)
{   
    int i=0,j=0;
    for(i=0;i<n;i++)
    {
       for(j=0;j<n;j++)
       {
          printf("%d ",matrix[i][j]);
       }
       printf("\n");
    }
}

#包括
#包括
无效运算(整数**矩阵,整数n);
int main()
{int x=0,y=0,n,k=1;
scanf(“%d”和“&n”);
int**matrix=malloc(sizeof(int)*n*n);
if(矩阵==NULL)
{
perror(“无法分配”);
返回1;
}
//x*y矩阵的输入值
而(n>=1)
{
对于(x=0,y=n-1;x=0;y--)
{
矩阵[x][y]=k++;
}
对于(x=n-1,y=0;x>=0;x--)
{
矩阵[x][y]=k++;
}
n--;
}
oput(矩阵,n);
自由(矩阵);
返回0;
}
//按行输出值。
无效操作(整数**矩阵,整数n)
{   
int i=0,j=0;

为了(i=0;i只是为了好玩,我研究了这个问题的解决方案。 我还不允许在这个问题下写评论,所以我认为从矩阵的右上角开始“螺旋编号”是这个问题的一个要求

我的解决方案是使用四个不同的循环在周长上添加数字,然后再次开始添加缩进级别

#include <stdio.h>
#include <string.h>

void printMatrix( int *nMatrix, int n, char *title )
{
  int i, j;

  if( title )
    printf( "%s\n", title );

  for( i=0; i<n; i++ )
  {
    for( j=0; j<n; j++ )
    {
      printf( "%d\t", *(nMatrix+n*i+j) );
    }

    printf( "\n" );
  }
}

void main( int argc, char *argv[] )
{
  if( argc == 2 )
  {
    int n = atoi ( argv[1] );
    int i, j;

    printf( "Input value: %d\n", n );

    if( n > 0 && n <= 10 )
    {
      int spiral[n][n];
      int indentNr, x, y, lastNr=0;

      memset( spiral, 0, n*n*sizeof( int ));  

      /* As indentNr is incremented, inner frames are filled */
      for( indentNr=0; n-2*indentNr>0; indentNr++ )
      {
        /* Go South */
        for( x=indentNr, y=n-1-indentNr; x<n-indentNr; x++ )
        {
          spiral[x][y] = ++lastNr;
        }

        /* Go West (Village People, 1979) */
        for( y=n-2-indentNr, x=n-1-indentNr; y>=indentNr; y-- )
        {
          spiral[x][y] = ++lastNr;
        }

        /* Go North */
        for( x=n-2-indentNr, y=indentNr; x>=indentNr; x-- )
        {
          spiral[x][y] = ++lastNr;
        }

        /* Go East */
        for( y=1+indentNr, x=indentNr; y<n-1-indentNr; y++ )
        {
          spiral[x][y] = ++lastNr;
        }
      }

      /* Print results */
      printMatrix( &(spiral[0][0]), n, "Final spiral:" );

    }
    else
    {
      printf( "ERROR: 'n' too big!\n" );
    }
  }  
  else
  {
    printf( "USAGE: spiral n\n" );
  }
}
#包括
#包括
无效打印矩阵(int*nMatrix,int n,char*title)
{
int i,j;
如果(标题)
printf(“%s\n”,标题);
对于(i=0;i=indentNr;x--)
{
螺旋[x][y]=++lastNr;
}
/*向东走*/

对于(y=1+indentNr,x=indentNr;y
可能是错误的,用
malloc
代替动态分配可能是更好的主意。提示:由于在循环中不使用
j
for(j=n;j>=1;j-->)(j=n,n-1,…,2,1)可以写成
for(j=n;j--)
(j=n-1,n-2,…,1,0)就我个人而言,我会使用2d数组。我的意思是,你当然可以用1d数组(
a[I*n+j]
而不是
a[I][j]
)来模拟它,但没有理由问自己
\n
做什么以及什么时候想使用它。是的,最好是
struct node*nodeptr=malloc(sizeof(*nodeptr)*n*n);
。请记住处理分配错误,例如(nodeptr==NULL){/*a位置失败*/abort();}
我忘了提到我的程序是用spiral.c编写的,并且创建了一个名为spiral.exe的可执行文件。正如用法说明所示,您只需从命令行“spiral”调用即可。您对传递给可执行文件的参数是否陌生?在本例中,“n”包含在argv[1]中。对不起,我对传递给可执行文件的参数真的很陌生。你能提供一些链接来了解它或提供一些关于它的进一步信息吗?只需谷歌“main arguments C”。要测试上面的代码,你只需要使用
if(argc==2)
检查并将scanf替换为
n=atoi(argv[1]);
行。