UVA - 400:Unix ls
题目的难点在于要求前面的每一列的是最大长度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相关推荐
- itpt_TCPL 第五章:指针和数组 - 第八章:UNIX系统接口
2016.10.11 - 01.09 个人英文阅读练习笔记(极低水准). 10.11 第五章:指针和数组 指针是保存一个变量的地址的变量.指针在C中被大量使用,部分是因为有时候它是唯一表达计算的方法, ...
- 例题5-8 Unixls命令(Unix ls,UVa400)
例题5-8 Unixls命令(Unix ls,UVa400) 需要注意的是要按列输出,要做好对应. 错误案例:孩子都WA哭了 #include<iostream> #include< ...
- 《UNIX环境高级编程 3rd》笔记(1 / 21):UNIX基础知识
文章目录 引言 UNIX体系结构 登录 登录名 shell 文件和目录 文件系统 文件名 路径名 工作目录 起始目录 输入和输出 文件描述符 标准输入.标准输出和标准错误 不带缓冲的IO 标准IO 程 ...
- C语言:Unix时间戳-转-UTC时间
C语言:Unix时间戳-转-UTC时间 C语言:UTC时间-转-Unix时间戳 一.简介 1. Unix时间戳 Unix系统内记录的时间是一个时间戳,所谓时间戳,就是当前时间距离1970年1月1日0时 ...
- 王垠:Unix的缺陷
王垠:Unix的缺陷 2012/08/24 | 分类: 程序员 | 8 条评论 | 来源: 王垠 | 标签: LINUX, UNIX 分享到: 2 来源:王垠的博客 我想通过这篇文章解释一下我 ...
- I/O模型之一:Unix的五种I/O模型
目录: <I/O模型之一:Unix的五种I/O模型> <I/O模型之二:Linux IO模式及 select.poll.epoll详解> <I/O模型之三:两种高性能 I ...
- 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 ...
- {“msg“:“参数错误“,“code“:400}:问题
** {"msg":"参数错误","code":400}:问题 ** 描述: 这是一个python爬虫提交post formdata的时候错 ...
- 服务器 响应400,加载资源失败:服务器响应的状态为400:spring mvc
我使用上传图像向数据库添加了一行.当我查询行的列表时,图像出现,但是当我尝试更新行时,我遇到了错误"无法加载资源:服务器响应400的状态:弹簧mvc".图像不出现!加载资源失败:服 ...
最新文章
- MIT公布“著名黑客之死”调查报告
- Css Div半透明
- ITK:观察过滤器Watch A Filter
- 百度关键词抓取工具_阿里巴巴国际站运营关键词抓取工具
- java httpresponse headres属性,Http Header里的Content-Type - 飞鸿影~ - 博客园
- aliy 数据库连接池加密_Druid实现数据库连接用户密码加密 互联网技术圈 互联网技术圈...
- 初学css常用属性整理
- 计算机一级考试通知书,1994年全国计算机等级考试一级试题及答案.doc
- 如何用css设置文字加粗,css如何设置文字加粗
- macd是什么意思?散户股民如何使用MACD应对证券牛市市场
- 建立TCP连接的时候,syn包什么情况下会被对端rst?
- Java-----四舍五入保留两位小数的方法
- HDUOJ---携程员工运动会场地问题
- VLAN的接口类型与TAG帧
- Network网络诊断工具for windows
- 牛客NC272 栈的压入、弹出序列
- 漫威对决同位素实验室怎么玩
- 关于C++的placement new和placement delete
- 【胖虎的逆向之路】04——脱壳(一代壳)原理脱壳相关概念详解
- c语言函数名大全dfun,C语言函数题库以及答案.docx
热门文章
- Numpy数组的保存与读取方法
- 009-MailUtils工具类模板
- java字符串 删除指定字符的那些事
- JavaScript封装方法,兼容参数类型为Number和String
- 微软Team Foundation Service 的Scrum模板中的Feature和Backlog Items 的区别【转载】
- edger多组差异性分析_简单使用DESeq2/EdgeR做差异分析
- 哈师大计算机等级考试,哈尔滨师范大学教务处
- java 项目做多级缓存_【开源项目系列】如何基于 Spring Cache 实现多级缓存(同时整合本地缓存 Ehcache 和分布式缓存 Redis)...
- from 下拉框多个值提交_Git commit 多行信息提交
- 底量超顶量超级大黑马指标源码_底量超顶量+地量买点_月线底量超顶量大牛股,底量超顶量超级大黑马,底量超顶量买入指标,后量超前量买入指标_指标公式分享交流论坛_理想论坛 - 股票论坛...