关于蛇形数组的一种方法,明明很对,但有很不理解的bug,求解答!

先看题

img


我的思路是就是找规律,我发现这就是个残缺的二维数组,都是n行n列,只不过,第一行是n个数,往下依次递减(这个很容易实现,下面完整代码有注释),然后先算出第一列的数,也就是a[0][0],a[1][0],a[2][0],a[3][0],a[4]
[0],通过找规律(从上往下,每两个相差的依次是1 ,2 ,3 ,4),接着根据每一行的开头a[n][0]的值,以及在这一行里相邻数之间的差值关系,对每一个元素都赋值。
代码如下

(((((()
#include<stdio.h>
int main(void)
{
int t,n,i,j,k,m;
scanf("%d%d",&t,&n);
int a[n][n];
//先规定第一列的起始数;
a[0][0]=1;
for(i=1;i<n;i++)
{a[i][0]=a[i-1][0]+i;
printf("%d ",a[i][0]);
} printf("\n"); //接着根据每行的开头第一个数,以及相邻两个数之间的差,算出每行的每个数
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)//j<n-i,实现了每一行比前一行少一个数;
{ //printf("a[%d][%d]是%d",i,j,a[i][j]);
a[i][j+1]=a[i][j]+(j+1)+(i+1);//原来是j+1再加1,但只符合第一行,第二行刚开始的两个数差的又比之前大了1;
printf("%d ",a[i][j]);
}
printf("\n");
}//*/

}

大佬试着运行一下,结果是这样的

img

对比答案

img

离谱的地方就在这里:明明刚开始赋值第一列的时候,问题没有,但是到下面循环,对每一行各个元素赋值,时候,第1行(前面是第0行)就出现了问题,数值从2变成了21!
而且,我对a[1][0]重新赋值,这一行的结果还是不变,也就是a[1][0]的值根本不变,
而对其他除了a[1][0]的的第一行列数,a[0[0,a[2[0,a[3[0,a[4[0,结果都会正常改变,这是为什么??

望采纳

下面是一个输出蛇形数组的 C 语言代码示例:

#include <stdio.h>

int main()
{
    // 输入蛇形数组的行数和列数
    int rows, cols;
    printf("请输入行数和列数:");
    scanf("%d%d", &rows, &cols);

    // 定义并初始化蛇形数组
    int arr[rows][cols];
    int val = 1;
    for (int i = 0; i < rows; i++)
    {
        // 如果行数为奇数,则需要从小到大填数
        if (rows % 2 == 1)
        {
            for (int j = 0; j < cols; j++)
            {
                arr[i][j] = val++;
            }
        }
        // 如果行数为偶数,则需要从大到小填数
        else
        {
            for (int j = cols - 1; j >= 0; j--)
            {
                arr[i][j] = val++;
            }
        }
    }

    // 输出蛇形数组
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

在上面的代码中,我们首先使用 scanf 函数输入了蛇形数组的行数和列数,然后根据行数的奇偶性来决定每行的填数顺序。接着,我们通过循环填充蛇形数组的每个元素,最后使用循环输出数组中的每个元素即可。

编译并运行上面的代码,输入 1 5,输出如下:

1 3 6 10 15
2 5 9 14
4 8 13
7 12
11

c语言吗
那你这里犯了2个错误
1.c语言要求在每个块内部,所有的定义必须在其他代码的前面,你scanf跑到数组定义的前面了,这语法就错误
2.除非C99,否则不支持用变量作为数组长度
我把a[n][n]改成a[10][10]放到scanf前面,运行的很好
另,变量t是干什么的,后面也没用上啊