球球了,这是一个值得深思的小细节
查看原帖
球球了,这是一个值得深思的小细节
470496
爱睡大觉楼主2021/2/3 21:37

请问为什么——先把值赋给对应坐标的数组再修改横纵坐标(不能在循环最后赋值,也不能在横纵坐标改完之后赋值)——才是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;
}
2021/2/3 21:37
加载中...