参考程序:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
string S;
cin >> S;
int len = S.length();
// 寻找最接近正方形的矩阵尺寸
int n = 0, m = 0;
// 从 sqrt(len) 倒序遍历,找到最接近正方形的矩阵尺寸
for (int i = sqrt(len); i >= 1; --i) {
if (len % i == 0) {
int j = len / i;
n = i;
m = j;
break; // 找到最接近正方形的矩阵后,立即退出循环
}
}
// 使用二维字符数组储存字符
char matrix[n][m]; // 声明一个 n x m 的二维数组
int idx = 0;
// 填充矩阵
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
matrix[i][j] = S[idx++];
}
}
// 根据题目要求,按列逐一输出矩阵中的字符
for (int j = 0; j < m; ++j) {
for (int i = 0; i < n; ++i) {
cout << matrix[i][j];
}
}
cout << endl;
return 0;
}