求最好的算法

来源:百度知道 编辑:UC知道 时间:2024/05/10 09:48:43
1 2 3 4 5
16 14 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
要求输入任意一个n值形成如上n*n的序列形式
第2行第2列是17,写错了,重写一下吧
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

是个蜗牛,
第二行第二列应该是17吧

做起来有点麻烦。
有空帮你写下

写好了,调试通过,如下,

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

void main()
{
int n;
int num;
int *p;
int i,j,k,l,m;
printf("input a number:\n");
scanf("%d", &n);
getchar();
p = new int[n*n]; //用一维数组模拟二维数组(没有动态的二维正方形数组)

num=1;

for(i=n-1;i>=n/2;i--)
{
for(j=n-1-i;j<=i;j++) //向右
{
p[(n-1-i)*n+j]=num++;
}
for(k=n-i;k<=i;k++) //向下
{
p[k*n+i]=num++;
}
for(l=i-1;l>=n-1-i;l--) //向左
{
p[i*n+l]=num++;
}
for(m=i-1;m>n-1-i;m--) //向上
{
p[m*n+n-1-i]=num++;
}
}

for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ", p[i*n+j]);
}
printf("\n");
}
delete []p;
}