题意:给出n个文件名,排序后左对齐输出,并且假设最长的字符串是M个字符,那么除了最右边那一列,每一列都是M + 2 个字符,最右列为M个字符。题目规定每一行60个字符。
解法:先读入,然后记录下最长的字符数,然后算出每一行应该输出几个单词。只不过他这个顺序是竖着的,所以我们稍微xjb搞一下就好了。然后就是没有自动帮忙补齐空字符的库函数,要自己写。
代码如下:
#include<bits/stdc++.h>
using namespace std;//120
int main()
{
int m, n, len;
string str[105];
while(scanf("%d", &n) != EOF)
{
m = 0;
for(int i = 0; i < n; i++)
{
cin >> str[i];
m = max((int)str[i].length(), m);
}
int row = (60 - m) / (m + 2) + 1, column = (n - 1) / row + 1;
sort(str, str + n);
for(int i = 0; i < 60; i++)
printf("-");
printf("\n");
for(int i = 0; i < column; i++)
{
for(int j = 0; j < row; j++)
{
if(i + j * column < n)
{
cout << str[i + j * column];
len = (j == row - 1 ? m : m + 2) - str[i + j * column].length();
for(int k = 0; k < len; k++)
printf(" ");
}
}
cout << endl;
}
}
return 0;
}