Unix ls UVA-400 思路

这个题目,主要是考察格式化输出
还有一个比较难的点就是行和列与数组的转化

// m 为最长字符数
//ceil为相上取整
int col = (60-m)/(m+2)+1
int row = ceil(double(n)/col)

输出的时候 我们一行一行输出,可是题目要求我们按列输出,所以就必须得找到单词数组各个元素和行列的关系,注意越界的情况。(也可以定义二维数组,先排序在输出)

for(int i=1;i<=row;i++){
            for(int j=1;j<=col;j++){
                if(((i+(j-1)*row)-1)<vs.size()){
                    if(j==col) cout<<left<<setw(m)<<vs[i+(j-1)*row-1]<<endl;
                    else cout<<left<<setw(m+2)<<vs[(i+(j-1)*row)-1];
                }
                else cout<<endl;//如果越界,就直接换行
            }
        }

代码如下:

//uva 400
#include<iostream>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<string>
#include<cmath>
using namespace std;
int main(){
    FILE *fin =freopen("xt5-8in.txt","r",stdin);
    int n;
    while(cin>>n){
        cout<<"------------------------------------------------------------"<<endl;
        vector<string> vs;
        string s;
        int m=0;
        for(int i=0;i<n;i++){
            cin>>s;
            vs.push_back(s);
            if(m<s.length()) m=s.length();
        }
        sort(vs.begin(),vs.end());
        
        int col = (60-m)/(m+2)+1;
        int row = ceil(double(n)/col);
        for(int i=1;i<=row;i++){
            for(int j=1;j<=col;j++){
                if(((i+(j-1)*row)-1)<vs.size()){
                    if(j==col) cout<<left<<setw(m)<<vs[i+(j-1)*row-1]<<endl;
                    else cout<<left<<setw(m+2)<<vs[(i+(j-1)*row)-1];
                }
                else cout<<endl;
            }
        }
        
    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 7,114评论 0 1
  • 数组 记录《剑指offer》中所有关于数组的题目,以及LeetCode中的相似题目 相关题目列表 说明 由于简书...
    wenmingxing阅读 5,375评论 1 12
  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 8,632评论 0 19
  • 1. 找出数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,...
    BookThief阅读 5,812评论 0 2
  • 高中毕业离开家之后,和父母朝夕都在一起的时间越来越少。 每每回忆起家庭生活,留在记忆中最多的还是读中学的那段时光。...
    阿拉小仙儿阅读 1,209评论 0 2