• 算法习题---5.8Unix ls命令(Uva400)


    一:题目

    输入正整数n以及n个文件名,将这n个文件名按照ASCII优先升序排列,按列优先方式左对齐输出。
    注意:文件名最长的为M,那么最右列字符串长度为M,其他列的长度为M+2
    注意:一列最多允许出现60个字符

    (一)样例输入

    10
    tiny
    2short4me
    very_long_file_name
    shorter
    size-1
    size2
    size3
    much_longer_name
    12345678.123
    mid_size_name
    12
    Weaser
    Alfalfa
    Stimey
    Buckwheat
    Porky
    Joe
    Darla
    Cotton
    Butch
    Froggy
    Mrs_Crabapple
    P.D.
    19
    Mr._French
    Jody
    Buffy
    Sissy
    Keith
    Danny
    Lori
    Chris
    Shirley
    Marsha
    Jan
    Cindy
    Carol
    Mike
    Greg
    Peter
    Bobby
    Alice
    Ruben

    (二)样例输出

    ------------------------------------------------------------
    12345678.123         size-1             
    2short4me            size2              
    mid_size_name        size3              
    much_longer_name     tiny               
    shorter              very_long_file_name
    ------------------------------------------------------------
    Alfalfa        Cotton         Joe            Porky        
    Buckwheat      Darla          Mrs_Crabapple  Stimey       
    Butch          Froggy         P.D.           Weaser       
    ------------------------------------------------------------
    Alice       Chris       Jan         Marsha      Ruben     
    Bobby       Cindy       Jody        Mike        Shirley   
    Buffy       Danny       Keith       Mr._French  Sissy     
    Carol       Greg        Lori        Peter                 

    二:代码实现

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <string>
    #include <algorithm>
    
    #define MAX 100
    #define MAX_COL 60
    
    using namespace std;
    
    void printStr(const string &str, int len, char ch)
    {
        cout << str;
        for (int i = str.length(); i < len; i++)
            cout << ch;
    }
    
    int main()
    {
        freopen("data5_8.in", "r", stdin);
        freopen("data5_8.out", "w", stdout);
    
        int num,max_len,rows,cols;
        string FileList[MAX];
        while (cin >> num)
        {
            max_len = 0;
            for (int i = 0; i < num; i++)
            {
                cin >> FileList[i];
                FileList[i].length() > max_len ? max_len = FileList[i].length() : max_len;
            }
            //计算行列
            cols = (MAX_COL - max_len) / (2 + max_len) + 1;
            rows = (num - 1) / cols + 1;
            //数据处理,进行排序
            sort(FileList, FileList + num);
            //进行数据输出
            printStr("", 60, '-');
            cout << endl;
            for (int r = 0; r < rows; r++)
            {
                for (int c = 0; c < cols; c++)
                    printStr(FileList[rows*c + r], c == cols - 1 ? max_len : max_len + 2, ' ');
                cout << endl;
            }
        }
    
        freopen("CON", "r", stdin);
        freopen("CON", "w", stdout);
        return 0;
    }
  • 相关阅读:
    c++的输入流基础知识
    用英文加优先级来解读C的声明
    django 用imagefiled访问图片
    关于Django中的表单验证
    c#语言的一些复习
    IIS发布的网站用localhost可以访问,改成IP就无法访问的解决方案 .
    首次关于IIS配置遇到的一些问题
    常见dos操作
    vs2012中对于entity framework的使用
    几个知识点
  • 原文地址:https://www.cnblogs.com/ssyfj/p/11516673.html
Copyright © 2020-2023  润新知