用c语言编程下列数组

img

你题目的解答代码如下:

#include <stdio.h>
int main ()
{
    int n,i,j,x=0,y=0,d=1,h=1;
    scanf("%d",&n);
    int a[n][n];
    while (x<n && y<n)
    {
        a[y][x] = d++;
        x -= h;
        y += h;
        if (x<0)
        {
            x = 0;
            h = -h;
        }
        if (y<0)
        {
            y = 0;
            h = -h;
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i;j++)
            printf("%4d",a[i][j]);
        printf("\n");
    }
    return 0;
}

img

如有帮助,望采纳!谢谢!

#include <stdio.h>
#include <stdlib.h>

#define N 100
int a[N][N] = {0};
int n = 0;

typedef enum _MOVEDIR
{
    move_rt = 1,    //右上移动
    move_lb = 2,    //左下移动
}MOVEDIR;

void snake()
{
    int i=0,j=0,p;
    MOVEDIR md = move_lb;
    bool bhwMove = false; //是否水平或垂直移动
    int t=0;
    for(p=1;p<n;p++)
        t+=p;
    for(int k=1;k<=n*n-t;k++)
    {
        if(a[i][j] == 0)
            a[i][j] = k;
        else
            k--;
        switch(md)
        {
        case move_rt: //右上移动,i--,j++
            {
                if(i==0) //如果移出上边界
                {
                    if(bhwMove) //如果之前已经横向移动,则转为向左下移动
                    {
                        bhwMove = false;
                        md = move_lb;
                        i++;
                        j--;
                    }
                    else //否则,进行先横向移动一次
                    {
                        bhwMove = true;
                        if(j==n-1)
                            i++;
                        else
                            j++;
                    }
                }
                else if(j==n-1) //移出右边界
                {
                    if(bhwMove)
                    {
                        bhwMove = false;
                        md = move_lb;
                        i++;
                        j--;
                    }
                    else
                    {
                        bhwMove = true;
                        i++;
                    }
                }
                else
                {
                    i--;
                    j++;
                }
            }
            break;
        case move_lb://左下移动,i++,j--
            {
                if(j==0) //如果移出上边界
                {
                    if(bhwMove) //如果之前已经向下移动,则转为向右上移动
                    {
                        bhwMove = false;
                        md = move_rt;
                        i--;
                        j++;
                    }
                    else //否则,进行先向下移动一次
                    {
                        bhwMove = true;
                        if(i == n-1)
                            j++;
                        else
                            i++;
                    }
                }
                else if(i==n-1) //移出底边界
                {
                    if(bhwMove)
                    {
                        bhwMove = false;
                        md = move_rt;
                        i--;
                        j++;
                    }
                    else
                    {
                        bhwMove = true;
                        j++;
                    }
                }
                else
                {
                    i++;
                    j--;
                }
            }
            break;
        }
    }
}

int main()
{
    while(1)
    {
        system("cls");
        printf("请输入矩阵大小(<=1则结束:");
        scanf("%d",&n);
        if(n<=1)
            return 0;
        int i,j;
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
                a[i][j] = 0;
        snake();
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                if(a[i][j] != 0)
                    printf("%4d",a[i][j]);
            }
            printf("\n");
        }
        system("pause");
    }
    return 0;
}