C++与STL部分竞赛题目举例:Unix is 命令

Posted 赵同学的代码时间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++与STL部分竞赛题目举例:Unix is 命令相关的知识,希望对你有一定的参考价值。

C++与STL部分常用函数已经悉数介绍

接下来将列举5道例题。



例题1:Unix Is 命令

输入正整数n以及n个文件名, 排序后按列优先的方式左对齐输出。假设最长文件名有M字符,则最右列有M字符,其它列都是M+2字符。设一行60字符。
样例输入:略(可由样例输出推出)
样例输出:

STL分析:看到排序,考虑使用STL中的sort
难点分析:按列优先是难点,考虑计算行列,再使用行列关系进行输出

代码展现:
#include <iostream>#include <algorithm>#include <string>using namespace std;
const int maxcol = 60;const int maxn = 100 + 5;string filenames[maxn];
void print(const string &s, int len){ cout << s; for (int i = 0; i < len - s.length(); i++) cout << ' ';}int main(){ int n; cin >> n; int M = 0; for (int i = 0; i < n; i++) { cin >> filenames[i]; M = max(M, (int)filenames[i].length()); //STL max } //计算列数和行数 int cols = (maxcol - M) / (M + 2) + 1, rows = (n - 1) / cols + 1; sort(filenames, filenames + n); //STL sort; for (int r = 0; r < rows; r++) { for (int c = 0; c < cols; c++) { int idx = c * rows + r; //表示出对应位置 if (idx < n) print(filenames[idx], c == cols - 1 ? M : M + 2); //巧妙运用问号表达式 } cout << endl; } return 0;}
测试结果:(为方便,采用了别的样例)


以上是关于C++与STL部分竞赛题目举例:Unix is 命令的主要内容,如果未能解决你的问题,请参考以下文章

浅谈 C++之 STL

c++ stl在竞赛里的使用总结

STL常用算法的使用与实现举例

STL常用算法的使用与实现举例

C++ STL详解超全总结(快速入门STL)

STL标准库 & 范型编程学习笔记:迭代器的设计原则和Iterator Traits的作用与设计