题意:输出挺麻烦的,注意确定行,和列,还有不足的要输出空格,除了最后一列长度是最大的长度加2,其他的多是最大的长度
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
char s[200][200];
int cmp(const void *_a,const void *_b)
{
char *a = (char *)_a;
char *b = (char *)_b;
return strcmp(a,b);
}
void print(char *str,int len)
{
int tmp = len - strlen(str);
printf("%s",str);
while (tmp--)
printf(" ");
}
int main()
{
while ( scanf("%d",&n) != EOF )
{
int Max,r,c;
Max = r = c = 0 ;
for (int i = 0 ; i < n ; i++)
{
scanf("%s",s[i]);
int len = strlen(s[i]);
if ( len > Max)
Max = len;
}
c = 62 / (Max+2); //列
r = (n+c-1) / c ; //行
qsort(s,n,sizeof(s[0]),cmp);
printf("------------------------------------------------------------\n");
for (int i = 0 ; i < r ; i++)
{
for (int j = 0 ; j < c ; j++)
{
int cur = j * r + i ;
if (cur >= n)
continue ;
if (cur >= ((int)(n-1)/r)*r) //是否是最后一列
printf(s[cur],Max);
else printf(s[cur],Max+2);
}
printf("\n");
}
}
return 0;
}