400 - Unix ls

题目:400 - Unix ls


题目大意:将给的字符串排序,然后要求最多的列,最少的行的格式输出, 并且要对齐, 对齐的长度是字符串最长的那个长度+2。


解题思路:用sort(),然后控制一下输出的顺序,一行一行的输出。注意:当心程序里有除以0的程序;


#include<stdio.h>
#include<stdlib.h>
#include<string.h>

const int N = 105;
const int M = 65;
int t, len, cloumn, row;
char s[N][M];
int l[N];

void findmax() {

	len = l[0] = strlen(s[0]);
		for(int i = 1; i < t; i++) {

			l[i] = strlen(s[i]);
			if(len < l[i]) 
				len = l[i];
		}
}

int cmp(const void * _a, const void * _b) {

	char * a = (char*) _a;
	char * b = (char*) _b;
	return strcmp(a,b);

}

int main() {
	
	int i, j, k;
	while(scanf("%d", &t) != EOF) {

		for(i = 0; i < t; i++)
			scanf("%s", s[i]);
	
		qsort(s, t, sizeof(s[0]), cmp);

		for(i = 0; i < 60; i++)
			printf("-");
		printf("\n");

		findmax();
		cloumn = 60 / (len + 2) == 0 ? 1 : 60 / (len + 2);
		if(t % cloumn == 0)
			row = t / cloumn;
		else
			row = t / cloumn + 1;

		for(j = 0; j < row; j++) {

			for(i = j; i < t; i += row) {

				printf("%s",s[i]);
				for(k = 0; k < len + 2 - l[i]; k++)
					printf(" ");
			}
			printf("\n");
		}
		
	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值