一開(kāi)始在家里面有了一點(diǎn)思路,用兩重循環(huán)。后來(lái)真正開(kāi)始在紙上寫(xiě)代碼的時(shí)候發(fā)現(xiàn)只要一重循環(huán)即可。
#include<stdio.h>
int main()
{
int a[10][10];
int dx[]={1,0,-1,0};
int dy[]={0,-1,0,1};
int value=1;
int i,j,n,x,y;
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
//初始位置為(1,n),初始值為1
x=1;
y=n;
i=0;
a[x][y]=value++;
//循環(huán)結(jié)束的條件為n*n個(gè)值已經(jīng)賦完
while(value<=n*n)
{
//按照當(dāng)前的方向進(jìn)行探測(cè)
x+=dx[i];
y+=dy[i];
//如果符合條件,賦值
if(x>=1 && x<=n && y>=1 && y<=n && a[x][y]==0)
a[x][y]=value++;
//如果不符合條件,把坐標(biāo)退回,方向進(jìn)行逆時(shí)針旋轉(zhuǎn)
else
{
x-=dx[i];
y-=dy[i];
i=(i+1)%4;
}
printf("\nvalue=%d\n",value);
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}