我们可以把这道题近似看成在一个二维数组中对指定地方进行赋值。
对于这一道题最重要的就是我们要确定边界条件
(图画的比较丑,请忽略)
对行数(a,c)
a = (len + 2) / 3
在这里我们不用担心行数会大于列数b的,因为/得到的结果是向下取整的。 对于列数
b = len + 2 - 2 * a
先输出蓝色部分
for (int i = 0; i < a - 1; i++) {
cout << s[i];
for (int j = 0; j < b - 2; j++) {
cout << " ";
}
cout << s[len - 1 - i] << endl;
}
再输出绿色部分
for (int i = a - 1; i < a + b - 1; i++) {
cout << s[i];
}
下面是全部代码
#include<bits/stdc++.h>
using namespace std;
int T;
string s;
int main() {
cin >> T;
while (T--)
{
cin >> s;
int len = s.length();
int a = (len + 2) / 3, b = len + 2 - 2 * a;
for (int i = 0; i < a - 1; i++) {
cout << s[i];
for (int j = 0; j < b - 2; j++) {
cout << " ";
}
cout << s[len - 1 - i] << endl;
}
for (int i = a - 1; i < a + b - 1; i++) {
cout << s[i];
}
cout << endl << endl;
}
return 0;
}