题目有点难懂,我这里给个容易理解些的翻译:
翻译
输入描述
给定一个数 t t t,表示数据组数。
对于每组数据,包含两个整数 n , m n,m n,m。
输出描述
对于任意一组数据,每组包括 ( 2 n − 1 ) × m (2n - 1) \times m (2n−1)×m 行。
第 i × j ( 1 ≤ i ≤ n , q ≤ j ≤ m ) i\times j(1 \le i \le n,q \le j \le m) i×j(1≤i≤n,q≤j≤m) 行包括 i i i 个数字 i i i;
第 i × j ( n + 1 ≤ i ≤ 2 n − 1 , q ≤ j ≤ m ) i\times j(n + 1 \le i \le 2n-1,q \le j \le m) i×j(n+1≤i≤2n−1,q≤j≤m) 行包括 2 n − i 2n - i 2n−i 个数字 2 n − i 2n - i 2n−i。
注:除最后一个波形外,每个单独的波形后面都有一个空行。
思路
对于每组数据,循环 m m m 次,先处理 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n 的情况。枚举 i i i,每次循环 i i i 次,每次输出 1 1 1 个 i i i 再换行即可。
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cout << i;
}
cout << endl;
}
接下来,同样处理 n + 1 ≤ i ≤ 2 n − 1 n + 1 \le i \le 2n - 1 n+1≤i≤2n−1 的情况。思考一下,其实这里就是把 i i i 从 n − 1 n-1 n−1 枚举到 1 1 1,每次循环 i i i 次,每次输出 1 1 1 个 i i i 再换行即可。
for (int i = n - 1; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
cout << i;
}
cout << endl;
}
别忘了,UVA 是一个很卡格式的网站。除最后一个波形外,每个单独的波形后面都有一个空行。 所以处理完每一组以后判断是否为最后一行。如果不是,就输出换行。
if (t != 1 && m != 1) {
cout << endl;
}
接下来就是代码。
code
#include <bits/stdc++.h>
using namespace std;
int t, n, m;
int main() {
cin >> t;
while (t--) {
cin >> n >> m;
while (m--) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cout << i;
}
cout << endl;
}
for (int i = n - 1; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
cout << i;
}
cout << endl;
}
if (t != 1 && m != 1) {
cout << endl;
}
}
}
return 0;
}
完结撒花!