蛇形输出数组

#include  

#include <stdio.h> 

int main(void) 

        //用户输入的值,创建n*n的矩阵 

        int n; 

        //蛇形从1开始计数 

        int count = 1; 

        //a[x][y],x是二维数组的第一个下标,y是第二个。 

        //round是蛇形矩阵的第几圈,从0开始。 

        int x,y,round; 

        scanf(“%d”,&n); 

        int (*a)[n] = calloc(n*n,sizeof(int)); 

       //如果n是1,则直接输出。 

       if(n == 1){ 

                a[0][0] = count; 

       }else{ 

                //下面以n=5为例 

                //一共有2(5/2)圈蛇形 

                for(round=0; round<n/2; round++){ 

                           /* 以下循环执行后输出如下: 

                          1 2 3 4 5 

                          */ 

                          x = round; 

                                         for(y=round;y<n-round;y++){ 

                                                       a[x][y]=count; 

                                                       count++; 

                                         } 

                         /* 以下循环执行后输出如下: 

                        1 2 3 4 5 

                                     6 

                                     7 

                                     8 

                         */ 

                         y = n – round – 1; 

                        for(x=round+1;x<n-round-1;x++){ 

                                   a[x][y]=count; 

                                   count++; 

                        } 

                        /* 以下循环执行后输出如下: 

                        1  2  3  4   5 

                                          6 

                                          7 

                                          8 

                       13 12 11 10 9 

                        */ 

                        x = n – round – 1; 

                        for(y=n-round-1;y>=round;y–){ 

                                     a[x][y]=count; 

                                     count++; 

                        } 

                        /* 以下循环执行后输出如下: 

                        1 2 3 4 5 

                        16        6 

                        15        7 

                        14        8 

                        13 12 11 10 9 

                        */ 

                        y = round; 

                        for(x=n-round-1-1;x>round;x–){ 

                                    a[x][y]=count; 

                                    count++; 

                        } 

            } 

            /* 上面的大循环执行后输出如下:

            1 2 3 4 5 

            16 17 18 19 6 

            15 24 20       7 

            14 23 22 21 8 

            13 12 11 10 9 

            */ 

            if(n%2 == 1){ 

                        //如果n值奇数,将最中间的空填上 

                        a[n/2][n/2] = count; 

             } 

     }

     //打印矩阵 

     for(x=0;x<n;x++){ 

            for(y=0;y<n;y++){ 

                        printf(“%d “,a[x][y]); 

            } 

            printf(“\n”); 

     } 

     printf(“\n”); 

     free(a); 

     return 0; 

}

一个蛇形数组的题目,编程输出如下类似的蛇形矩阵

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

#include<iostream> 
using namespace std; 
#define N 15 

int mat[N][N]; 
int all; 

void getLayer(int x,int y) //根据下标的规律,一层一层输出 

            int a=y,b=x; 
            mat[x][y]=all++; 
            if(x>a) { 
                        while(x!=a) { 
                                    x–; 
                                    y++; 
                                    mat[x][y]=all++; 
                         } 
            }else{ 
                        while(x!=a){ 
                                    x++; 
                                    y–; 
                                    mat[x][y]=all++; 
                        } 
            } 

void changeLayer(int x,int y) //每次输出一层,则转下一层 

            while(x<=N-1&&y<=N-1){ 
                        if(x<N-1&&y==0) 
                                    x++; 
                        else if(x==0&&y<N-1) 
                                    y++; 
                        else if(x==N-1&&y<N-1) 
                                    y++; 
                        else if(x<N-1&&y==N-1) 
                                    x++; 
                        getLayer(x,y); 
                        if(x==N-1&&y==N-1) 
                                    break; 
                        int tmp=x; 
                        x=y; 
                        y=tmp; 
            } 

int main() 

            mat[0][0]=1; 
            mat[0][1]=2; 
            mat[1][0]=3; 
            all=4; 
            changeLayer(1,0); 
            for(int i=0;i<N;i++) 
            { 
                        for(int j=0;j<N;j++) 
                                    cout<<mat[i][j]<<” “; 
                                    cout<<endl; 
            } 
            return 0; 

点赞