SOJ--1117: 最大整数
2014-03-30 19:43
232 查看
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; }
如果有不正确的地方,请提出您的建议,请批评指正哈!
相关文章推荐
- SOJ-最大整数
- SCU 1117 最大整数
- :输入两个正整数m和n,求其最大公约数和最小公倍数。
- js求数组中全部数字可拼接出的最大整数示例代码
- C++中检测整数类型的最大、最小值
- 整数数组的定义,然后输入一个整数X,假定X不在这个数组,返回小于X位置的最大数目i而超过X位置的最小数目j
- 输入三个整数,输出最大数和最小数
- n个整数中找出连续m个数加和是最大
- 从键盘上连续录入一批整数,比较并输出其中的最大值和最小值,当输入数字0时结束循环
- 输入4个整数,找出其中最大的数,用一个函数来实现.cpp
- 扩展欧几里得最大最小正整数解
- 有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。
- leetcode+华为笔试题-java实现返回一个整数数组中最大子数组的和
- 返回一个二维整数数组中最大联通子数组的和
- 求两个整数的最小公倍数与最大公约数
- 华为机试题:输入一组大于等于0的整数,从小到大排序输出,输出有连续数时,只输出连续数的最小和最大值
- 编写计算“两个整数的最大公约数”程序。
- 求两个整数的最大公约数
- int型整数的最大值和最小值
- 两个整数最大的公约数