排序检索-400 Unix ls

来源:互联网 发布:asp手机网站源码 编辑:程序博客网 时间:2024/06/05 03:17

题目大意:按顺序排列文件名,并按照规则输出。规则:1、以最长文件名的长度len为标准,最后一列文件名的所占长度为len,其他各列文件名长度为len+2;2、文件名从上到下排列,取最少行数。

图像解释:


解题过程:一次AC

正确代码:

# include <cstdio># include <cstdlib># include <cstring># include <ctype.h># include <string># include <cmath># include <sstream>//# define LOCALusing namespace std;char filename[100][60];int cmp(const void * a,const void *b){return strcmp(*(char(*)[60])a,*(char(*)[60])b);} int main(){# ifdef LOCALfreopen("in.txt","r",stdin);freopen("out.txt","w",stdout);#endifint n;//printf("kaishishuru\n");while(scanf("%d",&n)!=EOF){int len=0;int r=0;int c=0;for(int i=0;i<n;i++){scanf("%s",filename[i]);if(strlen(filename[i])>len) len=strlen(filename[i]);}qsort(filename,n,sizeof(filename[0]),cmp);//for(int i=0;i<n;i++) printf("%s ",filename[i]);//printf("\n%d",len);for(int i=0;i<60;i++){printf("-");}printf("\n");c=60/(len+2);int mod=60%(len+2);if(mod>=len) c++;r=ceil((double)n/c);for(int i=0;i<r;i++){for(int j=0;j<c;j++){int order=i+j*r;if(order<n){printf("%s",filename[order]);if(j==c-1){for(int k=0;k<len-strlen(filename[order]);k++) printf(" ");}else{for(int k=0;k<len+2-strlen(filename[order]);k++) printf(" ");}}}printf("\n");}}return 0;}


0 0
原创粉丝点击