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