关闭

Unix ls UVA 命令400

109人阅读 评论(0) 收藏 举报
分类:
方法一:(用sort排序)(#include<algorithm>)
  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstdio>
  4. #include<string>
  5. using namespace std;
  6. const int maxn=105;
  7. string str[maxn];
  8. void print1(string  s,int maxlen){               //在字符串后面加上空格以满足要求
  9.     int len=maxlen-s.length();
  10.     while(len--){
  11.         s+=" ";
  12.     }
  13.         cout<<s;
  14. }

  15. int main(){
  16.     int n;
  17.     while(cin>>n){
  18.         int maxlen=0;
  19.         for(int i=0;i<n;i++){
  20.         cin>>str[i];
  21.         if(maxlen<str[i].length())maxlen=str[i].length();
  22.         }
  23.         printf("------------------------------------------------------------\n");
  24.         sort(str,str+n);
  25.          int coloum=(60-maxlen)/(maxlen+2)+1;
  26.          int row=(n-1)/coloum+1;
  27.          for(int i=0;i<row;i++){
  28.              for(int j=i;j<coloum*row && j<n;j+=row){
  29.                  if(j==row*(coloum-1))print1(str[j],maxlen);     //每行的最后一个字符串
  30.                  else print1(str[j],maxlen+2);
  31.              }
  32.              cout<<endl;
  33.          }
  34.     } 
  35.     return 0;
  36. }


方法二:(用去qsort排序)(位于库函数  #include<stdlib.h>)
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cstdlib>
  4. using namespace std;
  5. const int maxn=105;
  6. int cmp_str(const void *a,const void *b)          //本题用qsort排序二维字符数组,故需要编写比较函数
  7.   {
  8.       return strcmp((char*)a,(char*)b);
  9.   }
  10.   void print1(const char * s,int maxlen){             //打印字符串,没达到长度则通过空格补充
  11.       printf("%s",s);
  12.     int len=maxlen-strlen(s);
  13.     while(len--){
  14.         printf(" ");
  15.     }
  16. }
  17. int main()
  18. {
  19.     int n;
  20.     while(scanf("%d",&n)==1){
  21.         char str[maxn][65];
  22.         int maxlen=0;
  23.         for(int i=0;i<n;i++){
  24.             scanf("%s",str[i]);
  25.             if(maxlen<strlen(str[i]))maxlen=strlen(str[i]);
  26.         }
  27.         printf("------------------------------------------------------------\n");
  28.           qsort(str, n, sizeof(str[0]), cmp_str);
  29.          int coloum=(60-maxlen)/(maxlen+2)+1;
  30.          int row=(n-1)/coloum+1;
  31.     for(int i=0;i<row;i++){
  32.              for(int j=i;j<coloum*row && j<n;j+=row){
  33.                  if(j==row*(coloum-1))print1(str[j],maxlen);
  34.                  else print1(str[j],maxlen+2);
  35.              }
  36.              printf("\n");
  37.          }
  38.     }
  39.     return 0; 
  40. }


注意:sort是qsort的升级版,能用sort就最好使用sort.
0
0
查看评论

UVA 400-Unix ls【字符串】

原题网址: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=341 按要求进行排版........
  • liuke19950717
  • liuke19950717
  • 2015-12-03 21:01
  • 330

UVA400 Unix ls

 G - Crawling in process... Crawling failed Time Limit:3000MS     Memory Limit:0KB     64bit IO Format...
  • zxiaopp
  • zxiaopp
  • 2015-08-05 17:47
  • 360

Uva400——Unix ls

#include #include #include using namespace std; string name[105]; const int maxcol = 60; int max(int x, int y) { return x > y ? x : y; } voi...
  • qq_25425023
  • qq_25425023
  • 2015-10-29 23:02
  • 159

uva 400 - Unix ls

Unix ls  The computer company you work for is introducing a brand new computer line and is developing a new Unix-like operating system t...
  • Frankiller
  • Frankiller
  • 2012-06-12 13:40
  • 2528

uva 400 Unix ls 文件输出排版 排序题

这题的需要注意的地方就是计算行数与列数,以及输出的控制。 题目要求每一列都要有能够容纳最长文件名的空间,两列之间要留两个空格,每一行不能超过60。 简单计算下即可。 输出时我用循环输出空格来解决对齐的,其实可以用一个很巧妙的方法,用printf("%-*s", k, fil...
  • hcbbt
  • hcbbt
  • 2013-07-24 00:30
  • 2763

uva-400-Unix ls

这道题目的大体意思是: 给你一些单词,先按字典序排列,然后再把排过序的单词按列输出。 答题思路: 用qsort排序,我发现最近经常用qsort,很好用的。然后算出来一共有几行,有几列。然后输出对应的字符串。 我在写程序的时候,错误的在for循环后面加了一个";"然后检查的...
  • rowanhaoa
  • rowanhaoa
  • 2012-06-16 00:53
  • 2326

UVA - 400 Unix ls

题目大意:将输入的文件名按 ascll 码顺序输出。输出从上到下,从左到右,每一行不能超过 60 个字符,除了最后一列外,每列的格式控制长度为最长的文件名的长度 +2。解题思路:排序输出。输出格式好复杂- -…#include<iostream> #include<cstdio&...
  • yanduoxuan
  • yanduoxuan
  • 2016-07-09 18:30
  • 68

UVa 400 Unix的ls命令

题目:题目是要对输入的每组文件名进行规则化输出,除了最后一列,其他列的宽度为maxlen+2,最后一列宽度为maxlen。maxlen为最长字符串的长度。(这个题看了好几遍都没看懂题意,最后google出来的才从博客明白此题题意。。之前自己一直是在数每列最长字符串后的空格数,总是明白不了题意。The...
  • buxizhizhou530
  • buxizhizhou530
  • 2014-03-17 01:48
  • 1359

uva 400 Unix ls

这道题的要点是首先必须算出最少要分的行数,也就是求最多可以分多少列,分的列数如果使得一行的总宽度大于60就到达列数的上界了,根据分的列数和行数以及单词的序号可以求出单词在最后打印出来的时候的行数和列数,根据这个行数和列数更新打印的缓存就行了,最后一次把缓存全部打印出来就行了,不要用printf一行一...
  • xiaohaowudi
  • xiaohaowudi
  • 2013-09-23 10:30
  • 477

UVA - 400

//int col=(atr-M)/(M+2)+1,row=(T-1)/col+1;//n个元素的二维数组计算行列数#include<iostream> #include<cstdio> #include<sstream> #include<cctype&g...
  • qq_33785671
  • qq_33785671
  • 2017-02-19 19:45
  • 113
    个人资料
    • 访问:77109次
    • 积分:5407
    • 等级:
    • 排名:第5931名
    • 原创:464篇
    • 转载:4篇
    • 译文:0篇
    • 评论:18条
    最新评论