zoukankan      html  css  js  c++  java
  • Unix ls命令(UVA 400)

    题目大意

    输入一个数字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;
    		}
    
    	}
    }
    
  • 相关阅读:
    Android Apk获取包名和Activity名称
    SoupUI接口测试学习分享
    Android 手机自动化测试工具有哪几种?
    SVN和CVS的区别
    名词
    本地解析地址步骤
    python3.6.1+selenium3.0环境安装问题及解决方法
    简述企业信息化与企业架构关系
    企业架构实践的线下公开课学习感悟
    golang 12.9 go mod 实践
  • 原文地址:https://www.cnblogs.com/HyPhoenix/p/14404161.html
Copyright © 2011-2022 走看看