原题链接: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:这一题主要是对字符对齐和左右对齐的复习
标签:int,uva400,60,column,Unix,ls,个字符,set1 From: https://www.cnblogs.com/purple123/p/17893416.html