题意:给你一堆文件名,要你以列优先输出,每个文件名的长度是最大的那个文件名的长度(也就是是长度不够的,你要在它后面加些空格),且同一行的两个文件名之间还要有两个空格。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
char str[105][65];
int fun(int,int);
int cmp(const void *a,const void *b)
{
return strcmp((char*)a,(char*)b);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int maxlen=0;
memset(str,0,sizeof(str));
for(int i=0;i<n;i++)
{
scanf("%s",&str[i]);
int slen=strlen(str[i]);
maxlen=max(maxlen,slen);
}
for(int i=0;i<n;i++)
{
int len=strlen(str[i]);
if(len<maxlen)
{
for(int j=len;j<maxlen;j++)
{
str[i][j]=' ';
}
str[i][maxlen]='\0';
}
}
qsort(str,n,sizeof(str[0]),cmp);
//for(int i=0;i<n;i++) puts(str[i]);
int cnt=fun(maxlen,n);
puts("------------------------------------------------------------");
for(int i=0;i<cnt;i++)
{
for(int j=i;j<n;j+=cnt)
{
if(j==i) printf("%s",str[j]);
else printf(" %s",str[j]);
}
puts("");
}
}
return 0;
}
int fun(int maxlen,int n)
{
int len=maxlen,res=1;
res+=((60-len)/(maxlen+2));
int ans=n/res+((n%res)!=0);
//printf("ans=%d\n",ans);
return ans;
}