Files
python/TangDou/LanQiaoBei/ZhongGaoJi/LanQiao15STEMA202401/3.cpp

45 lines
1.2 KiB
C++
Raw Normal View History

2025-08-30 18:35:01 +08:00
#include <bits/stdc++.h>
using namespace std;
/*
测试样例:
abcdefgh
输出:
aebfcgdh
思考:
行数:n, 列数:m 需要满足 m>=n
(1) 1行, m=length(abcdefgh)=8 n=1 满足m>=n
(2) 2行, m=8/2=4 n=2 满足m>=n
(3) 3行, 8不能被3整除,跳过,尝试继续增大行数试试
(4) 4行, m=8/4=2, n=4 m<n 不满足条件了,break
*/
const int N = 210;
char a[N][N]; // 开一个二维数组用来模拟
int n, m; // 最后是几行几列
int main() {
string s;
cin >> s; // 生成一个n行m列的矩阵
// 1、几行几列是答案?
int len = s.size();
for (int i = 1;; i++) {
if (len % i == 0 && len / i >= i) n = i; // 找到一个合理解,更新之
if (len / i < i) break; // 跑过了,就停下来
}
m = len / n; // 每行多少列
// 2、做一个二维矩阵存进去
for (int i = 0; i < n; i++) // 行
for (int j = 0; j < m; j++) // 列
a[i][j] = s[i * m + j];
// 3、从第一列开始,逐列从上下到输出矩阵中的字符
for (int j = 0; j < m; j++)
for (int i = 0; i < n; i++)
cout << a[i][j];
return 0;
}