您的位置:首页 > 其它

UVA 400 - Unix ls

2011-11-30 11:01 344 查看
题目大意:给你给定个数的文件名,按字典序排序之后输出,如果输出是在最后一列,输出长度为输入长度的最大长度,否则输出长度为输入长度的最大长度+2。输出时一行最多只能输出60个字符。按列输出,第一列输完之后输第二列,一直到最后一列。
思路:输入存2维数组,用qsort按字典序排序度找出输入的最长字符串长度,计算每行最多能输入多少个字符串即输出时每行会有几列,再计算要输出多少行。最后按输出格式输出就可以了。
总结:输出格式有点麻烦,别的就没什么了!
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>

using namespace std;

char str[110][70];

int cmp(const void *_a, const void *_b)
{
char *a = (char *)_a;
char *b = (char *)_b;
return strcmp(a, b);
}

int main()
{
int t;
while (scanf("%d", &t) != EOF)
{
memset(str, 0, sizeof(str));
int len =  0;
for (int i = 0; i < t; i++)
{
scanf("%s", str[i]);
if (len < strlen(str[i]))
len = strlen(str[i]);
}
for (int i = 0; i < t; i++)
{
for (int j = 0; j < len; j++)
{
if (str[i][j] == '\0')
{
for (int k = j; k < len; k++)
str[i][k] = ' ';
str[i][len] = '\0';
}
}
}
for (int i = 0; i < 60; i++)
printf("-");
printf("\n");
qsort(str, t, sizeof(str[0]), cmp);
int cl = 0;
int l = len;
while (l <= 60)
{
l = l + len + 2;
cl ++;
}
int r = 0;
if (t % cl == 0)
r = t / cl;
else
r = t / cl + 1;
for (int i = 0; i < r; i++)
{
for (int j = 0; j < cl - 1; j++)
{
printf("%s  ", str[j * r + i]);
}
printf("%s\n", str[r * (cl - 1) + i]);
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unix