请问为什么——先把值赋给对应坐标的数组再修改横纵坐标(不能在循环最后赋值,也不能在横纵坐标改完之后赋值)——才是100分呀
之前一直是在所有的if条件判别式里修改x和y的值,在for循环的最后才加上一句 fang[x][y]=i; 或者在每一个if判别式的最后(此时已修改完x、y值)再写fang[x][y]=i;
但是结果是10分
code:
#include<stdio.h>
int main()
{
int fang[40][40] = {0};
int n;
scanf("%d", &n);
int x = 1, y = (n + 1) / 2;
fang[x][y] = 1;
for (int i = 2; i <= n * n; ++i)
{
if (x == 1 && y != n)
{
fang[n][y + 1] = i; y += 1; x = n;
}
else if (x != 1 && y == n)
{
fang[x - 1][1] = i; y = 1; x -= 1;
}
else if (x == 1 && y == n)
{
fang[x + 1][y] = i; x += 1;
}
else
{
if (fang[x - 1][y + 1] == 0)
{
fang[x - 1][y + 1] = i, x -= 1, y += 1;
}
else { fang[x + 1][y] =i, x += 1; }
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
printf("%d ", fang[i][j]);
printf("\n");
}
return 0;
}