栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

#蛇形矩阵

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

#蛇形矩阵

题目描述

给你一个整数n,输出n∗n的蛇形矩阵。 输入描述: 输入一行,包含一个整数n 输出描述: 输出n行,每行包含n个正整数,通过空格分隔。

1<=n<=1000

示例1

输入

4

输出

1 2 6 7

3 5 8 13

4 9 12 14

10 11 15 16

输入n,生成n * n的蛇形矩阵。对于沿着主对角线,与主对角线垂直的斜线一共又2*n-1条(包括两个端点),并且,这每一条线上的元素横纵坐标之和为一个定值2n-2。

如4 * 4矩阵

1 2 6 7

3 5 8 13

4 9 12 14

10 11 15 16

其中一条斜线num[2][0]=4,num[1][1]=5,num[0][2]=6,其横纵下标之和皆为2。

本题分为两个部分看,一部分是反对角线以上(含反对角线),当下标之和为奇数时,行坐标递增,列坐标递减,开头的行坐标为0。当下标之和为偶数时,行坐标递减,列坐标递增,开头的行坐标为i。

另一部分是反对角线以下,当i为奇数时开头必在列坐标为n-1上,当i为偶数时开头必在行坐标为n-1上,并且递减,与另一个坐标的关系为i-(n-1)。

根据横纵坐标之和为定值,以上两种情况皆可通过定值i减去横/纵坐标,计算出对应的横/纵坐标。

个人认为知道规律后,关键是确定好起始坐标,及横纵坐标递减或递增的最大/最小值。

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

#include

using namespace std;

int main()

{

    int i, j, n, count = 1;

    cin>>n;

    int num[n][n];

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

    {

        if (i % 2 == 0)

        {

            for (j = i; j >= 0; j--)

                num[j][i - j] = count++;

        }

        else

        {

            for (j = 0; j <= i; j++)

                num[j][i - j] = count++;

        }

    }

    for (i = n; i <= 2 * n - 1; i++)

    {

        if (i % 2 == 0)

        {

            for (j = n - 1; j >= i - (n - 1); j--)

                num[j][i - j] = count++;

        }

        else

        {

            for (j = n - 1; j >= i - (n - 1); j--)

                num[i - j][j] = count++;

        }

    }

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

    {

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

            cout<

        cout<

    }

    return 0;

}

C++C数组

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/512972.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号