uva400 Unix Is命令 Unix ls

发布时间 2023-12-10 22:51:08作者: 黑屿白

原题链接:Unix Is命令 Unix ls - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

一道格式略微复杂的题目。

首先是注意点:

1、关于列的个数,已知一行共有60个字符,最右边一列有M个字符,其余列有M+2个字符。则列数为(60-M)/(M+2)+1,接着行数也就易得。

2、格式问题,要求左对齐且保持M或M+2个字符(算是回顾一下容易忘记的知识点)——运用 cout<<setw(M)<<left方式。

主要代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    while (cin>>n){
        vector<string> set1; //vector存储文件名 
        int column,row,M=0;  //列,行,最大字符 
        for (int i=0;i<n;i++){  //开始输入 
            string s;
            cin>>s;
            if (s.size()>M) M=s.size();
            set1.push_back(s);
        }
        sort(set1.begin(),set1.end()); //排序 
        column=(60-M)/(M+2)+1;  //求列数 
        if (n%column==0) row=n/column;  //求行数 
        else row=(n-1)/column+1;
        for (int i=0;i<60;i++)  //打印----- 
            printf("-");
        printf("\n");
        for (int i=0;i<row;i++){  //开始输出 
            for (int j=0;j<column;j++){
                int id=j*row+i;
                if (id<n){
                    if (j!=column-1) cout<<setw(M+2)<<left<<set1[id];
                    else cout<<setw(M)<<left<<set1[id];
                }
            }
            printf("\n");
        }
    }
    return 0;
}

Ps:这一题主要是对字符对齐和左右对齐的复习