题意:给定n个数,让你将他们重新组合使得它们组成的数字最大。
思路:贪心,很容易想到的是按位的首个数字比较大小,相同则往后比,但是写起来好困难。。。正解:将他们用字符串读入,相邻数字只有两种情况,要么a+b,要么b+a,比较二者大小,最后输出即可。
AC代码:
#include<bits/stdc++.h> using namespace std; bool cmp(string a,string b){ return a+b > b+a; } int main(void){ int n; while(cin>>n&&n){ string a[n]; for(int i = 0; i < n; i++){ cin>>a[i]; } sort(a,a+n,cmp); for(int i= 0; i < n; i++){ cout<<a[i]; } cout<<endl; } return 0; }