蓝雨丸子:螺旋方阵

来源:百度文库 编辑:高考问答 时间:2024/04/27 22:01:40
并要求构成如下的格式:如N=4
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4

main()
{
int i,j,k,m=1,n,a[100][100];
j=0;k=0;
scanf("%d",&n);
while(k<=(n+2)/2)
{
j=k;
for(i=k;i<=n-k-1;i++)
{
a[i][j]=m;
m++; }

i=n-k-1;
for(j=k+1;j<=n-k-1-1;j++)
{
a[i][j]=m;m++;
}

j=n-k-1;
for(i=n-k-1;i>=k;i--)
{
a[i][j]=m;m++;}
i=k;
for(j=n-k-1-1;j>=k+1;j--)
{ a[i][j]=m; m++;}
k++;
}
if(n%2!=0)
a[(n-1)/2][(n-1)/2]=a[(n-1)/2][(n-1)/2]-1;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}

// 显示螺旋方阵。

public class SpiralSquare
{
public static void main(String args[])
{
int n=50; //阶数
int mat[][] = new int [n][n];
int i,j,k=1;
for (i=0;i<(n+1)/2;i++) //i控制生成方阵的圈数,一圈内有4条边
{ //j控制生成一条边的数据
for (j=i;j<n-i;j++) //顶边,从左到右,行不变列变
mat[i][j] = k++; //k从1递增到n*n

for (j=i+1;j<n-i;j++) //右边,从上到下,行变列不变
mat[j][n-i-1] = k++;

for (j=n-i-2;j>=i;j--) //底边,从右到左,行不变列变
mat[n-i-1][j] = k++;

for (j=n-i-2;j>=i+1;j--) //左边,从下到上,行变列不变
mat[j][i] = k++;
}

for (i=0;i<mat.length;i++) //输出二维数组
{
for (j=0;j<mat[i].length;j++)
System.out.print(mat[i][j]+"\t");
System.out.println();
}
}
}

/*
程序运行结果如下:
1234
1213145
1116156
10987

*/