首页 > 其他分享 >计蒜客 | 矩阵蛇形输出

计蒜客 | 矩阵蛇形输出

时间:2022-08-23 20:55:29浏览次数:53  
标签:输出 ++ 样例 矩阵 空格 int num 蛇形 计蒜客

题目:

给定一个 m 行、n* 列的矩阵,请按照下图所示的顺序输出矩阵中所有的元素(从[0][0]位置开始,具体请参见下图)。
img
注意 每次碰到边界后,必须且只能沿着边界移动一格,不能后退,不能超出边界;在非边界区域只能向右上或左下方向前进。

输入格式

测评机会反复运行你写的程序。每次程序运行时,首先在第一行输入 2 个整数,分别对应题目描述中的 m 和 n(1 < m,n < 100),之间用一个空格分隔。接下来输入 m 行,每行包含 n 个整数(-10000 ≤ 每个数 ≤10000),每两个整数之间用一个空格分隔。

输出格式

输出为一行,包括 m × n 个整数,按照题目要求的顺序依次输出所有矩阵元素,任意两个整数之间用一个空格分隔,最后一个整数后面没有空格。

格式说明

输出时每行末尾的多余空格,不影响答案正确性

样例输入1

2 3
1 2 3
4 5 6

样例输出1

1 2 4 5 3 6

样例输入2

3 2
1 2
3 4
5 6

样例输出2

1 2 3 5 4 6

思路

简化题目

我们可以先把题目简化成这样:

#include<stdio.h>

int main()
{
    int num[110][110], i, j, k;
    int m, n;
    scanf("%d %d", &m, &n);

    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
            scanf("%d", &num[i][j]);

    for (i = 0; i < m + n; i++) {
        for (j = 0; j <= i; j++)
            printf("%d ", num[i-j][j]);
        i++;
        for (j = 0; j <= i; j++)
            printf("%d ", num[j][i-j]);
    }
    return 0;
}

(码风轻喷)
这里,我们忽略了边界,输出会是三角形,而不是矩形

回到原题

怎么能成为一个矩形呢?再加上限制条件就好啦

#include<stdio.h>

int main()
{
    int num[110][110], i, j, k;
    int m, n;
    scanf("%d %d", &m, &n);

    for (i = 0; i < m; i++)
        for (j = 0; j < n; j++)
            scanf("%d", &num[i][j]);

    for (i = 0; i < m + n; i++) {
        for (j = 0; j <= i; j++)
            if(j < n && i - j < m )      //限制条件
                printf("%d ", num[i-j][j]);
        i++;
        for (j = 0; j <= i; j++)
            if(j < m && i - j < n)       //限制条件
                printf("%d ", num[j][i-j]);
    }
    return 0;
}

这道题就成功ac了,很简洁!

标签:输出,++,样例,矩阵,空格,int,num,蛇形,计蒜客
From: https://www.cnblogs.com/runner-sky/p/16617642.html

相关文章