首页 > 其他 > 详细

Unix ls命令(UVA 400)

时间:2021-02-15 23:23:39      阅读:23      评论:0      收藏:0      [点我收藏+]

题目大意

输入一个数字n,紧接n行每行一个单词。

要求输出60个‘-‘,随后要求用最少行输出单词,其中设单词最长有M个字符,则最后一列有M个字符,其他行都有M+2个字符。

分析

这道题想明白了十分简单,或许最困难的地方是行列数的确定。其实题目中给出了明确的要求

  • 最少的行列
  • 由60个字符构成

那么这道题就有思路了,我们可以求出最长单词的长度,随后就可以根据最后一列有M个字符,其他行都有M+2个字符求出来有多少列,进而就能求出来有多少行。

#include<vector>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;

int main() {
	int n = 0;

	string str;
	vector<string> filenames;
	while (cin>>n)
	{
		filenames.clear();
		int m = 0;
		for (int i = 0; i < n; i++)
		{
			cin >> str;
			filenames.push_back(str);
			m = max(m, (int)str.length());
		}

		int cols = (60 - m) / (m + 2) + 1;
		int rows = (n - 1) / cols + 1;
		for (int i = 0; i < 60; i++)
		{
			cout << "-";
		}
		cout << endl;
		sort(filenames.begin(), filenames.end());//按照首字母排序

		for (int i = 0; i < rows; i++)
		{
			for (int j = 0; j < cols; j++)
			{
				//输入都是一行一行输出的
				int idx = rows * j + i;
				if (idx<n)
				{
					cout << filenames[idx];
					int max_length = j == cols - 1 ? m : m + 2;
					int blank_length = max_length - filenames[idx].length();
					for (int k = 0; k <blank_length;k++)
					{
						cout << " ";
					}
					
				}
			}
			cout << endl;
		}

	}
}

Unix ls命令(UVA 400)

原文:https://www.cnblogs.com/HyPhoenix/p/14404161.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!