UVA400

这题就是给字符串排序,然后按照题目的要求的个数输出。。

难点就是在这个格式,要求是一行只能60个字符,要行数最少,所以必须用 62 除以 最长的那个字符串长度加2 判断有几列,然后注意一下细节输出。。

不知道为什UVA上能过,但拿到ZOJ的时候PE何时错误了。。


AC代码:


#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<iostream>
#include<string.h>
using namespace std;
int cmp(const void *p1 ,const void *p2) {

	return *((string*)p1)  > *((string*)p2);
}
int main () {

	int t, max = 0;
	int row;
	int line;
	string name[1100];
	while ( scanf("%d\n" ,&t) != EOF ) {
		for (int i = 0 ; i < t ;i++ ) {
			getline (cin ,name[i]);
		}
		qsort (name , t ,sizeof(name[0]),cmp);
		for (int j = 0; j < 60 ;j++) 
			cout << "-";
		cout << endl;
		for (int k = 0;k < t ;k++) {
			if(name[k].size() > max)
				max = name[k].size();
		}

		row =(int) (62/(max + 2));
		if (t % row == 0) 
			line = t / row;
		else 
			line =(int) (t / row) +1;
		for (int i = 0; i < line ; i++){
			for (int j = 0 ; j < row ;j++) {
				if ( j * line < t)
					cout << name[i + (j * line)];
				if (j == row -1 ||  (i + (j * line)) + line == t    )
					break;
				for (int k = name[i + (j * line)].size(); k < max + 2 ;k++)
					cout <<" ";
			}
			cout << endl;
		}
		for ( int k = 0 ;k < 110 ;k++) {
		
			name[k] = "";
		}
		max = 0;
		row = 0;
		line = 0;
	}
		return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值