输入两个数,第一个数决定一个nXn的矩阵

输入两个数,第一个数决定一个nXn的矩阵,第二个数决定从1开始赋值,赋值的上限

比如:

输入:5 18

输出:p q

1  2  3  4  5

16 17 18 0  6

15 0  0  0  7

14 0  0  0  8

13 12 11 10 9



#include <stdio.h>

#define RIGHT   1

#define DOWN    2

#define LEFT    3

#define UP      4


int main(int argc, const char * argv[]) {

    int a[20][20]={};

    int n, m;

    scanf("%d%d", &n,&m);

    if (n<1||m<1||m>n*n||n>20) {

        return -1;

    }

    int type=RIGHT;//1:从左往右赋值 2:从上往下赋值 3:从右往左赋值4:从下往上赋值

    int p=0,q=0;

    int s1=n-1;

    int s2=n-1;

    int s3=0;

    int s4=1;

    int i=1;

    while (i<=m) {

        a[p][q]=i;

        switch (type) {

            case RIGHT:

                if (++q==s1) {//判断是否到边界

                    type = DOWN;

                    s1--;

                }

                break;

            case DOWN:

                if (++p==s2) {

                    type = LEFT;

                    s2--;

                }

                break;

            case LEFT:

                if (--q==s3) {

                    type = UP;

                    s3++;

                }

                break;

            case UP:

                if (--p==s4) {

                    type=RIGHT;

                    s4++;

                }

                break;

            default:

                break;

        }

        i++;

    }

    

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

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

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

        }

        printf("\n");

    }

    return 0;

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值