解题思路:
使用二维数组存放数值,t 来实现累加。通过两个循环变量来实现对螺旋方阵的实现。即改变 t 存放的位置
变量 x 控制行,变量 y 控制列。↑
index的作用↑
实现:
可以分为以下几个步骤:
1.先 x 不动,y向右边移动(增加y的值)
第一步代码实现:↓
2.第二步,y不动,x 的值增加
第二步图解
3.第三步:x 不变,y减小(和第一步刚好相反)↓
第三步代码实现:↓
4.第四步:y 的值不变,x 的值减小(与第二步相反)↓
第四步:代码实现↓
5.剩下的就是一直循环以上四个步骤,直到全部数据录入数组
细节:
1.需要注意循环退出的出口(可以利用t的取值做为出口,也可以用x与y的取值)
完整代码:↓
源代码
#include<stdio.h>
int main()
{
int n,index = 1;
//1表示y加,-1表示y减;
//2表示x加,-2表示x减
int a[100][100];
int i = 0,x = 0,y = 0,t = 1;
scanf("%d",&n);
while(1)
{
//第一步
if(index == 1)
{
for(y = i;y < n-i;y++)
{
a[x][y] = t;
t++;
}
index = 2;
t--;
y--;
}
//第二步
if(index == 2)
{
for(x = i;x < n-i;x++)
{
a[x][y] = t;
t++;
}
index = -1;
t--;
x--;
}
//第三步
if(index == -1)
{
for(y;y >= i;y--)
{
a[x][y] = t;
t++;
}
index = -2;
t--;
y++;
i++;
}
//第四步
if(index = -2)
{
for(x;x >= i;x--)
{
a[x][y] = t;
t++;
}
index = 1;
x++;
}
//出口 也可以判断t是否等于n^2
if(i >= n) break;
}
//将数组内容输出
for(x = 0;x < n;x++)
{
for(y = 0;y < n;y++)
printf("%3d",a[x][y]);
printf("\n");
}
return 0;
}