C语言中按照以下方阵示例生成一个由自然数1~N的2次方组成的N阶方阵 写两段程序 在线等啊谢啦

(1)
1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 24
15 16 22 23 25
(2)按以下示例方阵格式,生成一个螺旋方式排列的由自然数1-N的2次方组成的N阶方阵。
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

第一个
#include <stdio.h>

int a[100][100];
int main()
{
int i,j,k,n;
scanf("%d", &n);
memset(a,-1,sizeof(a)); //将数组设置为-1
for (i=1;i<=n;i++) //将n*n的区域赋值为0
for (j=1;j<=n;j++)
a[i][j]=0;
k=2;
i=2;
a[1][1]=1;
j=1;
while (1)
{
if (a[i][j] == -1)
{
break;
}
while (a[i][j]==0)
a[i--][j++]=k++;
i++;
while (a[i][j]==0)
a[i++][j--]=k++;
j++;
}
if (i == n + 1)
{
i--;
j++;
while (k <= n * n)
{
while (a[i][j]==0)
a[i--][j++]=k++;
i+=2;
j--;
while (a[i][j]==0)
a[i++][j--]=k++;
j+=2;
i--;
}
}
else
{
j-=2;
i++;
while (k <= n * n)
{
while (a[i][j]==0)
a[i++][j--]=k++;
j+=2;
i--;
while (a[i][j]==0)
a[i--][j++]=k++;
i+=2;
j--;
}
}
for (i=1;i<=n;i++)
{
for (j=1;j<=n;j++)
printf("%3d",a[i][j]);
printf("\n");
}
return 0;
}

第二个
#include <stdio.h>

int a[100][100];
int main()
{
int i,j,k,n;
scanf("%d", &n);
memset(a,-1,sizeof(a)); //将数组设置为-1
for (i=1;i<=n;i++) //将n*n的区域赋值为0
for (j=1;j<=n;j++)
a[i][j]=0;
k=2;
i=1;
a[1][1]=1;
j=2;
while (k<=n*n)
{
while (a[i][j]==0) //如果还是0,就从左到右赋值
a[i][j++]=k++;
i++;
j--; //将i,j设为刚赋值位置的下面一个位置
while (a[i][j]==0) //如果还是0,就从上到下赋值
a[i++][j]=k++;
i--;
j--; //将i,j设为刚赋值位置的左面一个位置
while (a[i][j]==0) //如果还是0,就从右到左赋值
a[i][j--]=k++;
i--;
j++; //将i,j设为刚赋值位置的上面一个位置
while (a[i][j]==0) //如果还是0,就从下到上赋值
a[i--][j]=k++;
i++;
j++; //将i,j设为刚赋值位置的右面一个位置
}
for (i=1;i<=n;i++) //打印结果
{
for (j=1;j<=n;j++)
printf("%3d",a[i][j]);
printf("\n");
}
return 0;
}追问

memset这个函数不知道是哪个库里的,无法运行能不能不用到链表里的函数而只用二维数组的知识写?

追答

不用memset也可以,改成
for (i = 0; i < 100; i++)
{
for (j = 0; j < 100; j++)
{
a[i][j] = -1;
}
}

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网