来回答点关注????。下边这个问题对小bai的我究极难度,求解

来回答点关注????。下边这个问题对小bai的我究极难度,求解

问题描述:

img

img


题目如上边那副图,我的思考为下图,想将框框里边打造成为一个函数,但是这个函数里边得输出a[i]
呀,emmm,不会啦。又菜又爱玩罢了~
求解求解
或者是针对蛇形的其他方法,提供一点点思路即可,感谢感谢

解决方案如下,思路写在注释里了,有帮助望采纳,谢谢!

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int n = 0, i = 0, j = 0;
    scanf("%d", &n); //输入行列数
    //动态申请n行n列的二维数组,如果觉得麻烦根据题目要求申请足够大的也行
    int** num = (int**)malloc(sizeof(int*) * n);
    for (i = 0; i < n; i++)
        num[i] = (int*)malloc(sizeof(int) * n);
    //我们接下来的思路就是一圈一圈往中心填数字,数字是逐渐递增的,用count来表示,初始值为1,结束时为n*n
    int start = 0, finish = n - 1, count = 1; //start指当前行列最小值,finish指当前行列最大值

    while (count <= n * n)
    {
        //找到题目里1开始的位置,我们开始,根据count增加的方向走
        //每一圈的规律都是一样的,结束的标志就是count达到了指定的大小
        for (i = start; i <= finish; i++) //从上到下,行增列不变
            num[i][finish] = count++;
        for (j = finish - 1; j >= start; j--) //从右往左,列减行不变
            num[finish][j] = count++;
        for (i = finish - 1; i >= start + 1; i--) //从下向上,行减列不变
            num[i][start] = count++;
        for (j = start; j <= finish - 1; j++) //从左向右,列增行不变
            num[start][j] = count++;
        start++; finish--; //缩圈,行列的最小值加1,最大值减1
    }
    for (i = 0; i < n; i++) //输出
    {
        for (j = 0; j < n; j++)
            printf("%-5d", num[i][j]);
        printf("\n");
    }

    //最后记得释放掉申请的内存
    for (i = 0; i < n; i++)
        free(num[i]);
    free(num);
    return 0;
}

img

img