题目意思: 输入n个数,要求找到一个组合方式,使得值最大输出这个值
解题思路: 自定义cmp函数以及排序应用
1:这一题的输入的数据当成string处理比较方便,在cmp函数的时候就会非常简洁,但是时间效率不高
2:题目要求组合成一个最大的数,这个时候我们想到了排序,但是按照平时的排序我们就会发现是错的,所以呢我们就要自己写cmp函数了。具体思路是这样的,比较两个字符串,例如90和56,判断是9056大还是5690大,相应的返回true和false,那么这样最后只要顺序打印就是我们要得答案了
代码:
#include <algorithm> #include <iostream> #include <cstring> #include <string> #include <vector> #include <cstdio> #include <stack> #include <queue> #include <cmath> #include <set> using namespace std; #define MAXN 55 int n; string str[MAXN]; //自定义cmp函数 bool cmp(string s1 , string s2){ if(s1+s2 > s2+s1) return true; return false; } int main(){ //freopen("input.txt" , "r" , stdin); while(scanf("%d" , &n) && n){ for(int i = 0 ; i < n ; i++) cin>>str[i]; sort(str , str+n , cmp); for(int i = 0 ; i < n ; i++) cout<<str[i]; printf("\n"); } return 0; }