http://acm.hit.edu.cn/judge/show.php?Proid=1011&Contestid=0 #include <iostream> #include <cstring> #include <cstdlib> using namespace std; const int MAX = 128; int cmp(const void*, const void*); int main() { char word[MAX][MAX]; int n, p, m; int i, j, max, l, k; while (cin >> n) { max = 0; //读入字符串并确定最大长度 for (i = 0; i < n; i++) { cin >> word[i]; l = strlen(word[i]) + 2; if (l > max) max = l; } //对字符串进行排序,并确定每行的输出字符串数和输出的行数 qsort(word, n, sizeof (word[0]), cmp); if (max < 60) p = 60 / max; else p = 1; m = (n + p - 1) / p; for (i = 0; i < 60; i++) putchar('-'); putchar('/n'); for (i = 0; i < m; i++) { //一行一行循环输出 for (j = 0, l = 0; j < p; j++) { //每行中一个一个循环输出, 开始时 l = 0 if (j * m + i < n) { //j * m + i 表示当前的下标 for (k = 0; k < l; k++) //先输出空格 putchar(' '); l = max - strlen(word[j * m + i]); //计算下次输出的空格数 cout << word[j * m + i]; } } putchar('/n'); } } return 0; } int cmp(const void *a, const void *b) { if (strcmp((char*) a, (char*) b) < 0) return -1; else return 1; }