#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
const int maxcol = 60; //最大列长度
const int maxn = 100 + 5;
string filename[maxn];
inline void print(const string temp, int len, char extra) //输出字符串 temp, 长度不足len补extra
{
cout << temp;
for(int i = 0; i < len - (int)temp.length(); i ++)
printf("%c", extra);
}
int main()
{
int n;
while(~scanf("%d", & n))
{
int Maxlen = 0;
for(int i = 0; i < n; i ++)
{
cin >> filename[i];
Maxlen = max(Maxlen, (int)filename[i].length()); //找出最大长度Maxlen
}
print("", maxcol, '-'); //输出格式 输出-------------..(60个)
cout << endl; //不要忘记回车
sort(filename, filename + n); //排序
int col = (maxcol - Maxlen) / (Maxlen + 2) + 1; //计算列
int row = (n - 1) / col + 1; //计算行
for(int i = 0; i < row; i ++)
{
for(int j = 0; j < col; j ++)
{
int idx = j * row + i; //竖着输出
if(idx < n)
print(filename[idx], j == col - 1 ? Maxlen : Maxlen + 2, ' '); //最后一列输出长度Maxlen 其余输出Maxlen + 2
}
printf("\n");
}
}
}
题意:给你一堆文件名,要你以列优先输出,每个文件名的长度是最大的那个文件名的长度(也就是是长度不够的,你要在它后面加些空格),且同一行的两个文件名之间还要有两个空格。
题解:重新从算法入门这本书开始。否则觉得做什么都没有目的,没有进程。