SOJ--1117: 最大整数

1117: 最大整数

【问题描述】

设有n个正整数,将他们连接成一排,组成一个最大的多位整数.

例如:n=3时,3个整数13,312,343,连成的最大整数为:34331213

又如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613

【输入】

1行一个正整数L,代表测试数据的组数。

接下来L行,每行第一个是正整数N(1<=N<=6),该行接下来有N个正整数Mi(1<=Mi<=3000)

【输出】

输出L行,每组输入数据输出一行,输出连接成的最大多位数

【样例输入】

2
3 13 312 343
4 7 13 4 246

【样例输出】

34331213
7424613

解析:贪心问题,如果暴力模拟的话比较麻烦,要考虑位数,还要每一位进行比较,这道题其实考察的是近似排序,直接排序就好了,具体如下,很显然应该按字符串进行输入,对于输入的字串a和b比较ab和ba的大小,如果ab大的话则定义a>b,反之b>a,直接利用STL中的sort(vStr.begin(),vStr.end(),cmp)自定义cmp函数就ok了,这样就简单多了哈!
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using std::endl;
using std::cout;
using std::cin;
using std::sort;
using std::vector;
using std::string;
//排序规则
bool cmp(string str1 , string str2)
{
	string temp1 = str1+str2;
	string temp2 = str2+str1;
	return temp1>temp2;
}
int main()
{
	vector<string> vStr;
	string str;
	int L , N;
	cin >> L;
	while(L--)
	{
		vStr.clear();
		cin >> N;
		for(int i=0; i<N; ++i)
		{
			cin >> str;
			vStr.push_back(str);
		}
		sort(vStr.begin() , vStr.end() , cmp);
		//输出
		for(int i=0; i<N; ++i)
		{
			cout << vStr[i];
		}
		cout << endl;
	}
	return 0;
}
如果有不正确的地方,请提出您的建议,请批评指正哈!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值