zoukankan      html  css  js  c++  java
  • UVA 400 Unix ls by sixleaves

    题目其实很简单,答题意思就是从管道读取一组文件名,并且按照字典序排列,但是输入的时候按列先输出,再输出行。而且每一行最多60个字符。而每个文件名所占的宽度为最大文件名的长度加2,除了输出在最右边的文件名的宽度是最大文件名长度之外。编程实现这个功能,这就是Unix系统下ls命令的一部分而已。具体实现如下。
    主要学习的技能要点就是如何用偏移位移法来按列输出。如果一个矩阵n行m列,要按照列输出。但是我们知道,编程时候,只能是for(行)在列。所以必须要有一个偏移量来计算这种偏移关系。x = rows * c + r;

     1 #include <iostream>
     2 #include <string>
     3 #include <algorithm>
     4 #include <vector>
     5 #include <cmath>
     6 
     7 using namespace std;
     8 
     9 vector<string> words;
    10 void print(const string &s, int len, char extra);
    11 int main() {
    12     
    13     
    14     int n;
    15     string w;
    16     
    17     while (cin >> n) {
    18         
    19         int max = 0;
    20         words.clear();
    21         for (int i = 0; i < n; i++) {
    22             cin >> w;
    23             string::size_type str_size = w.size();
    24             if (str_size > max) max = str_size;
    25             words.push_back(w);
    26         }
    27         int cols = (60 - max) / (max + 2) + 1;
    28         int rows = ceil(double(n) / cols);
    29         sort(words.begin(), words.end());
    30         print("", 60, '-');
    31         cout << endl;
    32         for(int r = 0; r < rows; r++) {
    33             
    34             for (int c = 0; c < cols; c++) {
    35                 
    36                 int idx = c * rows + r;
    37                 if (idx < n) print(words[idx],(c == cols - 1? max: max + 2), ' ');
    38                 
    39             }
    40             
    41             cout << endl;
    42             
    43         }
    44         
    45         
    46     }
    47     
    48     return 0;
    49     
    50 }
    51 
    52 void print(const string &s, int len, char extra) {
    53     
    54     cout << s;
    55     string::size_type str_size = s.size();
    56     for (int i = 0; i < len - str_size; i++) {
    57         cout << extra;
    58     }
    59 }
  • 相关阅读:
    vue中computed和watch的区别,以及适用场景
    vue中使用过的全局API
    厦门中控
    设置圆角的弧度,保持兼容性
    伪元素::after和::before
    SpringMVC
    mui问题
    错误记录
    Android错误
    Android之界面(布局文件layput)
  • 原文地址:https://www.cnblogs.com/objectc/p/4553412.html
Copyright © 2011-2022 走看看