请问这个蛇形方阵基础的c语言怎么写?

输出一个 n 阶方阵,其元素排列方式为:从左上角开始按列顺序呈现出蛇形。如:

1 20 21 40 41 60 61 80 81 100
2 19 22 39 42 59 62 79 82 99
3 18 23 38 43 58 63 78 83 98
4 17 24 37 44 57 64 77 84 97
5 16 25 36 45 56 65 76 85 96
6 15 26 35 46 55 66 75 86 95
7 14 27 34 47 54 67 74 87 94
8 13 28 33 48 53 68 73 88 93
9 12 29 32 49 52 69 72 89 92
10 11 30 31 50 51 70 71 90 91

输入描述
每行一个正整数 n (n <= 120),表示 n 阶方阵。
输出描述
按列序排列的蛇形矩阵,每个方阵之间空一行。每个矩阵元素间一个空格,包含最后一个元素之后。
样例输入
3
4
样例输出
1 6 7

2 5 8

3 4 9

1 8 9 16

2 7 10 15

3 6 11 14

4 5 12 13

抱歉,我用的暴力破解,希望采纳
#include<stdio.h>
void main()
{
int i,j,n,k;
long a[100][100];
printf(" 样例输入:\n");
scanf("%d",&n);
k=1;
for(i=1;i<=n;i++)
{
if(i%2==0)
{
for(j=n;j>=1;j--)
{
a[j][i]=k++;
}
}
else
{
for(j=1;j<=n;j++)
{
a[j][i]=k++;
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}_

img


_

img

#include<stdio.h>
int t[120][120];
int main()
{
    int n,i,j;
    do {
        scanf("%d",&n);
        int d,r=0,p=1,flag=1;
        while(r<n)//逐列扫描
        {
            d=0;
            while(d<n&&flag==1)
            {
                t[d++][r]=p++;
            }
            while(d<n&&flag==-1)
            {
                t[n-(d++)-1][r]=p++;
            }
            r++;
            flag*=-1;
        }
        for(i=0; i<n; i++)
        {
            for(j=0; j<n; j++)
            {
                printf("%d ",t[i][j]);
            }
            printf("\n");
        }
    } while(n>0);
    return 0;
}

https://ask.csdn.net/questions/7465256?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-3.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-3.pc_feed_download_top3ask


#include<stdio.h>

//交换元素的值(地址传递,函数内值的改变会影响传递元素的值)
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void main(){
    int n, i, j, k;
    int matrix[120][120];    //矩阵

    scanf("%d", &n);    //输入阶数n

    for(i = 0, k = 1; i < n; i++)    //对n阶矩阵初始化
        for(j = 0; j < n; j++)
            matrix[i][j] = k++;


    for(i = 1; i < n; i++)    //遍历1 ~ n-1行
        if(i % 2 != 0)    //如果为奇数行
            for(j = 0; j < n / 2; j++) //矩阵第i行的元素进行逆序排序
                swap(&(matrix[i][j]), &(matrix[i][n - j - 1]));
            

    for(i = 0; i < n; i++) {    //打印矩阵
        for(j = 0; j < n; j++)
            printf("%5d", matrix[j][i]);  //打印j行i列
        putchar('\n');
    }
}
//以3阶方阵为例

//初始化:
//1 2 3    (0行)
//4 5 6    (1行)
//7 8 9    (2行)

//转换:
//0行:不变
//1行:奇数行,逆序排序;新的1行(6 5 4)
//2行:偶数行,不变

//新矩阵
//1 2 3
//6 5 4
//7 8 9

//输出(i为外循环,j为内循环)(matrix[j][i](j行i列))
//第一次循环:1 6 7    (分别为0行0列、1行0列、2行0列)
//第二次循环:2 5 8 (分别为0行1列、1行1列、2行1列)
//第三次循环:3 4 9 (分别为0行2列、1行2列、2行2列)

img

img

img

https://ask.csdn.net/questions/7465256?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-3.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-3.pc_feed_download_top3ask
可以参考下这个,基本上一模一样!谢谢,望采纳!

这个逻辑搞清楚就好了,一个循环就搞定,奇数列和偶数列分开就行,i,j从0开始到n-1,if i%2=0,(即余数=0表示奇数列,数组第一列是a[0][j]),then a[i][j]=in+j;else a[i][j]=in+n-j;endif