实验7-2-9 螺旋方阵 (20分)(坐标法)

所谓“螺旋方阵”,是指对任意给定的N,将1到N×N的数字从左上角第1个格子开始,按顺时针螺旋方向顺序填入N×N的方阵里。本题要求构造这样的螺旋方阵。

输入格式:
输入在一行中给出一个正整数N(<10)。

输出格式:
输出N×N的螺旋方阵。每行N个数字,每个数字占3位。

输入样例:
5

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

#include<stdio.h>
#define N 10
int main(){
    int n,arr[N][N];
    //根据题目输出方阵故创建二维数组来操作
    scanf("%d",&n);
    int x=0,y=0;//以左上角为坐标原点开始设立坐标
    int turn_up=1,turn_lower=n-1,turn_left=0,turn_right=n-1;
    //这是整个图形的边界,同时每转一圈后将边界缩小1
    int direction=0;//0为向右,1为向下,2为向左,3为向上
    int count=1;//循环次数为n的平方,同时作为输出内容从1到n的平方
    while(count<=n*n){
        if(direction==0)//如果是向右走
        {
            arr[y][x++]=count++;//横坐标+1,计数+1
            if(x==turn_right)//如果向右走遇到右边界
            {
                direction=1;//改变方向,向下走
                turn_right--;//右边界-1
            }
        }else if(direction==1)//如果是向下走
        {
            arr[y++][x]=count++;//纵坐标+1,计数+1
            if(y==turn_lower)//向下走遇到下边界
            {
                direction=2;//改变方向,向左走
                turn_lower--;//下边界-1

            }
        }else if(direction==2)//如果是向左走
        {
            arr[y][x--]=count++;//横坐标-1,计数+1
            if(x==turn_left)//向左走遇到左边界
            {
                direction=3;//改变方向,向上走
                turn_left++;//左边界+1
            }
        }else if(direction==3)//如果是向上走
        {
            arr[y--][x]=count++;//纵坐标-1,计数+1
            if(y==turn_up)//向上走遇到上边界
            {
                direction=0;//改变方向,向右走
                turn_up++;//上边界+1
            }
        }
    }//二维数组安排结束,统一格式输出
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            printf("%3d",arr[i][j]);
        }printf("\n");
    }
}

特别容易出错的就是设置上界的时候一定要设置为1!!!因为是从第一行开始循环的!!!
By_Suki

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值