Unix ls UVA-400 思路

這個題目,主要是考察格式化輸出
還有一個比較難的點就是行和列與數(shù)組的轉(zhuǎn)化

// m 為最長字符數(shù)
//ceil為相上取整
int col = (60-m)/(m+2)+1
int row = ceil(double(n)/col)

輸出的時候 我們一行一行輸出,可是題目要求我們按列輸出,所以就必須得找到單詞數(shù)組各個元素和行列的關(guān)系,注意越界的情況。(也可以定義二維數(shù)組,先排序在輸出)

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;
            }
        }
        
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容