题目的难点在于要求前面的每一列的是最大长度L+2,最后一列的长度是L。对于宽度为WIDTH=60的一行来说,一行可以放下多少个单词决定了需要多少行,知道了行数才能开始根据行数开始放置。

我的做法是col = (WIDTH+ 2) / (L + 2),即提前给WIDTH加2,这个是给最后一列加的,因为实际上最后一列会减去这个2,所以加2没有影响。

看了一下书中的做法,是col = (WIDTH - L) / (L + 2) + 1,即先把最后一列减去,因为L <= WIDTH,所以可以保证col大于0,效果相同。

然后对于第i行第j列,我们要判断在实际排好序的单词数组中的位置,最后一行还需要判断是否已经结束(因为最后一行有可能没有满)

书中是自己写了一个控制输出流的,我用的是C++自己的流控制,需要iomanip头文件,然后使用操纵符setw设置最小宽度,使用left控制左对齐(默认是右对齐)

需要注意algorithm库中的max函数的两个参数必须类型相同

#include <iostream>
#include <string>
#include <array>
#include <algorithm>
#include <sstream>
#include <iomanip>using namespace std;namespace {constexpr int MAXN = 105;constexpr int WIDTH = 60;array<string, MAXN> words;const string LINE(WIDTH, '-');int n;size_t max_len, word_len;int row, col, n_idx, idx;
}int main() {ios::sync_with_stdio(false);while (cin >> n) {ostringstream os;os << left;max_len = 0;for (int i = 0; i < n; ++i) {cin >> words[i];max_len = max(max_len, words[i].size());}sort(words.begin(), words.begin() + n);col = (WIDTH + 2) / (max_len + 2);row = (n - 1) / col + 1;for (int i = 0; i < row; ++i) {for (int j = 0; j < col; ++j) {idx = j * row + i;n_idx = (j + 1) * row + i;if (n_idx >= n) {word_len = max_len;} else {word_len = max_len + 2;}os << setw(word_len) << words[idx];if (word_len == max_len) {os << "\n";break;}}}cout << LINE << "\n";cout << os.str();}return 0;
}

UVA - 400:Unix ls相关推荐

  1. itpt_TCPL 第五章:指针和数组 - 第八章:UNIX系统接口

    2016.10.11 - 01.09 个人英文阅读练习笔记(极低水准). 10.11 第五章:指针和数组 指针是保存一个变量的地址的变量.指针在C中被大量使用,部分是因为有时候它是唯一表达计算的方法, ...

  2. 例题5-8 Unixls命令(Unix ls,UVa400)

    例题5-8 Unixls命令(Unix ls,UVa400) 需要注意的是要按列输出,要做好对应. 错误案例:孩子都WA哭了 #include<iostream> #include< ...

  3. 《UNIX环境高级编程 3rd》笔记(1 / 21):UNIX基础知识

    文章目录 引言 UNIX体系结构 登录 登录名 shell 文件和目录 文件系统 文件名 路径名 工作目录 起始目录 输入和输出 文件描述符 标准输入.标准输出和标准错误 不带缓冲的IO 标准IO 程 ...

  4. C语言:Unix时间戳-转-UTC时间

    C语言:Unix时间戳-转-UTC时间 C语言:UTC时间-转-Unix时间戳 一.简介 1. Unix时间戳 Unix系统内记录的时间是一个时间戳,所谓时间戳,就是当前时间距离1970年1月1日0时 ...

  5. 王垠:Unix的缺陷

    王垠:Unix的缺陷 2012/08/24 | 分类: 程序员 | 8 条评论 | 来源: 王垠     | 标签: LINUX, UNIX 分享到: 2 来源:王垠的博客 我想通过这篇文章解释一下我 ...

  6. I/O模型之一:Unix的五种I/O模型

    目录: <I/O模型之一:Unix的五种I/O模型> <I/O模型之二:Linux IO模式及 select.poll.epoll详解> <I/O模型之三:两种高性能 I ...

  7. ROS推荐链接:UNIX/LINUX专为初学者的教程和命令 http://www.ee.surrey.ac.uk/Teaching/Unix/

    ROS推荐链接:UNIX/LINUX专为初学者的教程: http://www.ee.surrey.ac.uk/Teaching/Unix/ UNIX Tutorial for Beginners A ...

  8. {“msg“:“参数错误“,“code“:400}:问题

    ** {"msg":"参数错误","code":400}:问题 ** 描述: 这是一个python爬虫提交post formdata的时候错 ...

  9. 服务器 响应400,加载资源失败:服务器响应的状态为400:spring mvc

    我使用上传图像向数据库添加了一行.当我查询行的列表时,图像出现,但是当我尝试更新行时,我遇到了错误"无法加载资源:服务器响应400的状态:弹簧mvc".图像不出现!加载资源失败:服 ...

最新文章

  1. MIT公布“著名黑客之死”调查报告
  2. Css Div半透明
  3. ITK:观察过滤器Watch A Filter
  4. 百度关键词抓取工具_阿里巴巴国际站运营关键词抓取工具
  5. java httpresponse headres属性,Http Header里的Content-Type - 飞鸿影~ - 博客园
  6. aliy 数据库连接池加密_Druid实现数据库连接用户密码加密 互联网技术圈 互联网技术圈...
  7. 初学css常用属性整理
  8. 计算机一级考试通知书,1994年全国计算机等级考试一级试题及答案.doc
  9. 如何用css设置文字加粗,css如何设置文字加粗
  10. macd是什么意思?散户股民如何使用MACD应对证券牛市市场
  11. 建立TCP连接的时候,syn包什么情况下会被对端rst?
  12. Java-----四舍五入保留两位小数的方法
  13. HDUOJ---携程员工运动会场地问题
  14. VLAN的接口类型与TAG帧
  15. Network网络诊断工具for windows
  16. 牛客NC272 栈的压入、弹出序列
  17. 漫威对决同位素实验室怎么玩
  18. 关于C++的placement new和placement delete
  19. 【胖虎的逆向之路】04——脱壳(一代壳)原理脱壳相关概念详解
  20. c语言函数名大全dfun,C语言函数题库以及答案.docx

热门文章

  1. Numpy数组的保存与读取方法
  2. 009-MailUtils工具类模板
  3. java字符串 删除指定字符的那些事
  4. JavaScript封装方法,兼容参数类型为Number和String
  5. 微软Team Foundation Service 的Scrum模板中的Feature和Backlog Items 的区别【转载】
  6. edger多组差异性分析_简单使用DESeq2/EdgeR做差异分析
  7. 哈师大计算机等级考试,哈尔滨师范大学教务处
  8. java 项目做多级缓存_【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)...
  9. from 下拉框多个值提交_Git commit 多行信息提交
  10. 底量超顶量超级大黑马指标源码_底量超顶量+地量买点_月线底量超顶量大牛股,底量超顶量超级大黑马,底量超顶量买入指标,后量超前量买入指标_指标公式分享交流论坛_理想论坛 - 股票论坛...