Matrix 如何按螺旋顺序打印数字?

Matrix 如何按螺旋顺序打印数字?,matrix,Matrix,谢谢,, 我正在尝试解决一个项目euler问题,它希望我打印 21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13 这是由数字1开始,顺时针方向向右移动5乘5矩阵形成的,但我在为螺旋矩阵编写代码时遇到了麻烦 强烈建议您自己解决project Euler问题,如果您真的陷入困境,请寻求帮助 下面是我将如何用c编写一个代码来打印问题中建议的螺旋 #include<stdio.h> main(

谢谢,, 我正在尝试解决一个项目euler问题,它希望我打印

21 22 23 24 25
20  7  8  9 10
19  6  1  2 11
18  5  4  3 12
17 16 15 14 13

这是由数字1开始,顺时针方向向右移动5乘5矩阵形成的,但我在为螺旋矩阵编写代码时遇到了麻烦

强烈建议您自己解决project Euler问题,如果您真的陷入困境,请寻求帮助

下面是我将如何用c编写一个代码来打印问题中建议的螺旋

#include<stdio.h>
main()
{
int i,j,nq=9;//nq is a odd number which represents the order of the matrix
int lim=(int)nq/2,cnt=2;
int a[nq][nq];
 for(i=0;i<nq;i++){
    for(j=0;j<nq;j++)
    a[i][j]=0;
    }
a[lim][lim]=1;
a[lim][lim+1]=2;
int i1=lim,j1=lim+1;i=lim,j=lim;
while(1){
       if(cnt>(nq*nq))
         break;
        cnt++;
if(i==i1)
{  j=j1;
   if(i<=lim)
   {
       i=i1;
    if(a[i1+1][j1]==0)
        a[++i1][j]=cnt;
    else
       a[i1][++j1]=cnt;
   }
   else
   {   i=i1;
    if(a[i1-1][j1]==0)
       a[--i1][j1]=cnt;
    else
        a[i1][--j1]=cnt;
   }
}
else
{   i=i1;
    if(j<lim)
   {
        j=j1;
       if(a[i1][j+1]==0)
        a[i1][++j1]=cnt;
       else
        a[--i1][j1]=cnt;
   }
   else
   {    j=j1;
       if(a[i1][j1-1]==0)
        a[i1][--j1]=cnt;
       else
        a[++i1][j1]=cnt;
   }
  }
}
for(i=0;i<nq;i++){
    for(j=0;j<nq;j++)
    printf(" %d    ",a[i][j]);
    printf("\n");
}

}

我不知道您是否真的想要打印螺旋图,但请参见下面我用Python 2.7编写的#28解决方案

l = [1]
def corners(step,l):
    counter = 0
    while counter < 4:
        l.append(max(l)+step)
        counter +=1
    return l

step = 2
while step < 1001:
    l = corners(step, l)
    step += 2

print sum(l)
l=[1]
def弯角(步骤1):
计数器=0
当计数器<4时:
l、 附加(最大(l)+步数)
计数器+=1
返回l
步骤=2
当步骤<1001时:
l=拐角(台阶,l)
步骤+=2
打印金额(l)
无效打印螺旋线(int A[3][5],int m,int n)
{
int T=0;int B=m-1;int L=0;int R=n-1;
int dir=0;
int i=0;int j=0;int k=0;int l=0;

在编码时,你已经达到了什么程度?我试着用C++写,但不能得到任何东西。
l = [1]
def corners(step,l):
    counter = 0
    while counter < 4:
        l.append(max(l)+step)
        counter +=1
    return l

step = 2
while step < 1001:
    l = corners(step, l)
    step += 2

print sum(l)
    void printSpiral(int A[3][5],int m, int n)
{
    int T=0; int B=m-1; int L=0; int R=n-1;
    int dir=0;
    int i =0; int j=0; int k=0; int l=0;
    while(T<=B && L<=R)    
    {
        //printf("dir %d ",dir);
        if(dir == 0)
        {
        for( i=L;i<=R;i++)
        {
        printf("%d ",A[T][i]);
        //printf("\n");
        }
        T++;
        dir=1;  
        }
        else if(dir == 1)
        {
          //  printf("%d R ",R);
        for( j=T;j<= B;j++)
        {
        printf("%d ",A[j][R]);
        //printf("\n");
        //printf("dir1");
        }
        dir=2;
        R--;
        }
        else if(dir == 2)
        {
        for(k=R;k>= L;k--)
        {
        printf("%d ",A[B][k]);
        }
        dir=3;
        B--;
        }
        else if(dir == 3)
        {
        for( l=B;l>= T;l--)
        {
            printf("%d ",A[l][L]);
        }
        L++;
        dir=0;
        }    
    }
}