排序检索-400 Unix ls

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

图像解释:


解题过程:一次AC

正确代码:

# include <cstdio>
# include <cstdlib>
# include <cstring>
# include <ctype.h>
# include <string>
# include <cmath>
# include <sstream>
//# define LOCAL
using 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 LOCAL
	freopen("in.txt","r",stdin);
	freopen("out.txt","w",stdout);
	#endif
	int 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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值