我们可以把这道题近似看成在一个二维数组中对指定地方进行赋值。 对于这一道题最重要的就是我们要确定边界条件 alt (图画的比较丑,请忽略) 对行数(a,c)

a = (len + 2) / 3

在这里我们不用担心行数会大于列数b的,因为/得到的结果是向下取整的。 对于列数

 b = len + 2 - 2 * a

alt 先输出蓝色部分

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;
}