方阵填数

题目描述

在一个NN的方阵中,填入1,2,……NN个数,并要求构成如下的格式:
例如:
N=5
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5

N=6
16 17 18 19 20 1
15 30 31 32 21 2
14 29 36 33 22 3
13 28 35 34 23 4
12 27 26 25 24 5
11 10 9 8 7 6

输入

每个测试文件只包含一组测试数据,每组输入一个N。

输出

输出构成的方阵。

样例输入

5

样例输出

13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5

源程序

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a[50][50]={0};
    int n,i,j,x,y,total=0,x1,y1,x2,y2,kase1=0,kase2=0;
    //设置四个边界,当循环到边界时转向填充数据
    scanf("%d",&n);
    x=n;
    y=1;
    x1=1;
    x2=n;
    y1=1;
    y2=n;
    while(total<n*n){		
        while(y<=y2){
            a[x][y]=++total;
            y++;
        }
        y--;
        x2--;
        x--;
        while(x>=x1){
            a[x][y]=++total;
            x--;
        }
        x++;
        y2--;
        y--;
        while(y>=y1){
            a[x][y]=++total;
            y--;
        }
        y++;
        x1++;
        x++;
        while(x<=x2){
            a[x][y]=++total;
            x++;
        }
        x--;
        y1++;
        y++;
    }
    for(i=1;i<=n;i++){
        if(kase1){
            printf("\n");
        }
        kase1=1;
        kase2=0;
        for(j=1;j<=n;j++){
            if(kase2){
                printf(" ");
            }
            kase2=1;
            printf("%d",a[j][i]);
        }
    }
    return 0;
}

发布了2 篇原创文章 · 获赞 2 · 访问量 50

猜你喜欢

转载自blog.csdn.net/amazz/article/details/103917500