week1-[循环嵌套]蛇
题目描述
给定正整数 nnn 和 mmm,输出一个 nnn 行 mmm 列的蛇形矩阵。具体输出格式参见样例。
输入格式
输入共 111 行 222 个正整数 n,mn,mn,m。
输出格式
输出共 nnn 行,每行 mmm 个用空格隔开的正整数表示答案。
样例 #1
样例输入 #1
4 4
样例输出 #1
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
提示
样例解释 111
1 -> 2 -> 3 -> 4
|
v
8 <- 7 <- 6 <- 5
|
v
9 -> 10 -> 11 -> 12
|
v
16 <- 15 <- 14 <- 13
数据范围
对于所有数据,1≤n,m≤1001\leq n,m\leq 1001≤n,m≤100。
题目解析:
要求输出一个 n×mn \times mn×m 的矩阵,按照"蛇形"顺序填充:
- 第一行从左到右填充
- 第二行从右到左填充
- 第三行从左到右填充,依次交替
- 数字从 1 开始递增
解题思路:
- 使用两层循环遍历矩阵行和列。
- 外层循环遍历行
i
,内层循环遍历列j
。 - 每行根据奇偶判断填充方向:
- 偶数行(0、2、4...,从 0 开始)从左到右
- 奇数行(1、3、5...)从右到左
- 维护一个递增的计数器
num
,每输出一个数字加 1。 - 输出时,行内数字用空格隔开,每行结束换行。
C++实现:
c++
#include <iostream>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
int num = 1;
for(int i = 0; i < n; i++) {
if(i % 2 == 0) { // 偶数行从左到右
for(int j = 0; j < m; j++) {
cout << num;
if(j != m - 1) cout << " ";
num++;
}
} else { // 奇数行从右到左
int start = num + m - 1;
for(int j = 0; j < m; j++) {
cout << start;
if(j != m - 1) cout << " ";
start--;
}
num += m;
}
cout << "\n";
}
return 0;
}