回型矩阵-递归法

题目描述

给你一个整数n,按要求输出n∗n的回型矩阵

输入描述:

输入一行,包含一个整数n

1<=n<=19

输出描述:

输出n行,每行包含n个正整数.

输入

4

输出

1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

解题思路

→   ↓   ←    ↑   ………………

代码

#include <stdio.h>
void EE(int A[][100], int h, int l, int num, int x, int y); //声明函数
void SS(int A[][100], int h, int l, int num, int x, int y); 
void WW(int A[][100], int h, int l, int num, int x, int y);
void NN(int A[][100], int h, int l, int num, int x, int y);

int main()
{
    int A[100][100] = { 0 }, n;
    scanf("%d", &n);
    EE(A, n, n, 1, 0, 0); //数组,行数,列数,数组被赋成的值,每次开始的位置

    for (int i = 0; i < n; i++)//打印数组
    {
        for (int v = 0; v < n; v++)
            printf("%4d", A[i][v]);
        printf("\n");
    }
    return 0;
}

void EE(int A[][100], int h, int l, int num, int x, int y) //向右
{
    for (int i = 0; i < l; i++, y++)    //i代表循环的次数
        A[x][y] = num++;                //num给对应位置赋值
    if (--h != 0)                       //利用h,l判断是否停止运行
        SS(A, h, l, num, ++x, --y);     //进入下一个函数
}

void SS(int A[][100], int h, int l, int num, int x, int y) //向下
{
    for (int i = 0; i < h; i++, x++)
         A[x][y] = num++;
    if (--l != 0)
        WW(A, h, l, num, --x, --y);
}

void WW(int A[][100], int h, int l, int num, int x, int y) //向左
{
    for (int i = 0; i < l; i++, y--)
         A[x][y] = num++;
    if (--h != 0)
        NN(A, h, l, num, --x, ++y);
}

void NN(int A[][100], int h, int l, int num, int x, int y) //向上
{
    for (int i = 0; i < h; i++, x--)
        A[x][y] = num++;
    if (--l != 0)
        EE(A, h, l, num, ++x, ++y);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值