题目:
给定一个 m 行、n* 列的矩阵,请按照下图所示的顺序输出矩阵中所有的元素(从
[0][0]
位置开始,具体请参见下图)。
注意 每次碰到边界后,必须且只能沿着边界移动一格,不能后退,不能超出边界;在非边界区域只能向右上或左下方向前进。
输入格式
测评机会反复运行你写的程序。每次程序运行时,首先在第一行输入 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