c语言写蛇形矩阵

来源:互联网 发布:谷歌搜索引擎优化指南 编辑:程序博客网 时间:2024/05/22 16:45


这道题我真的也弄了很久。

算法分析:

首先我们把它分成上三角和下三角。我们可以把上三角赋值想这样子1, 2 3, 4 5 6, 7 8 9 10, 11 12 13 14 15.

第1次赋值是1次,第2次是2次,第3次是3次...。所以外循环是n次,内循环次数等于该次输出数字的最大行数。然后我们看奇数行和数行的行走的方向是不一样的。奇数行是右再斜下。偶数行是下然后斜上。是这样子赋值的,a[0][0],a[1][0] a[0][1],a[2][0] a[1][1] a[0][2],a[0][3] a[1][2] a[2][1] a[3][0]。可以看到如果是奇数行,行数是从0开始,结尾数列数都是以0结束。同理偶数行分析。下三角同理分析。我看网上下三角有这样子的办法就是下三角是n*n-对应上三角的值+1。希望对你有帮助。

代码1如下

#include<stdio.h>

#define N 100

void ZigzagMatrix(int a[][N], int n);

int main()

{

    int a[N][N],i,j,n;

    printf("Input n:\n");

    scanf("%d",&n);

    if(n>=1&&n<=9)

    {

        ZigzagMatrix(a,n);

        for(i=0;i<n;i++)

        {

            for(j=0;j<n;j++)

            {

                printf("%d\t",a[i][j]);

            }

        printf("\n");

        }

    }

    else

        printf("Input error!\n");

    return 0;

void ZigzagMatrix(int a[][N], int n)

{

    int i,j,k;

    k=1;

    for(i=0;i<n;i++) 

    {

        for(j=0;j<=i;j++)

        {

            if(i%2==0)

            a[i-j][j]=k;

            else

            a[j][i-j]=k;

            k++;

         }

    }

    k=n*n;

    for(i=0;i<=n-1;i++) 

    {

        for(j=0;j<=i;j++)

        {

            if(i%2==0)

            a[n-1+j-i][n-1-j]=k;

            else

            a[n-1-j][n-1+j-i]=k;

            k--;

         }

    }

}

代码2如下

#include<stdio.h>

#define N 100

void ZigzagMatrix(int a[][N], int n);

int main()

{

    int a[N][N],i,j,n;

    printf("Input n:\n");

    scanf("%d",&n);

    if(n>=1&&n<=9)

    {

        ZigzagMatrix(a,n);

        for(i=0;i<n;i++)

        {

            for(j=0;j<n;j++)

            {

                printf("%d\t",a[i][j]);

            }

        printf("\n");

        }

    }

    else

        printf("Input error!\n");


    return 0;

void ZigzagMatrix(int a[][N], int n)

{

    int i,j,k;

    k=1;

    for(i=0;i<n;i++) 

    {

        for(j=0;j<=i;j++)

        {

            if(i%2==0)

            {

                a[i-j][j]=k;

                a[n-1+j-i][n-1-j]=n*n-k+1;

            }

            else

            {

                a[j][i-j]=k;

                a[n-1-j][n-1+j-i]=n*n-k+1;

            }

            k++;

         }

    }

    

}


原创粉丝点击