链接:https://ac.nowcoder.com/acm/problem/16783
来源:牛客网
来源:牛客网
题号:NC16783
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
设有n个正整数(n ≤ 20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
输入描述:
第一行,一个正整数n。 第二行,n个正整数。
输出描述:
一个正整数,表示最大的整数
示例1
输入
3 13 312 343
输出
34331213
示例2
输入
20 921650139 925571586 931563581 923960668 870548039 358493469 371229218 737101511 514654859 185379933 19421244 117259400 301947570 48520742 79303948 222979736 153546206 250582036 106394401 198125223
输出
931563581925571586923960668921650139870548039793039487371015115146548594852074237122921835849346930194757025058203622297973619812522319421244185379933153546206117259400106394401
//本题是贪心问题,主要问题在于什么样的数要放到前面,从中可以找到 //如果s1和s2之间相比较的话,最简单的方式就是将两个拼串尝试后比较即可。 #include <bits/stdc++.h> using namespace std; string s[22]; bool comp(string s1, string s2) { if (s1+s2>s2+s1) return true; return false; } int main() { int n; cin>>n; for (int i=1;i<=n;i++) { cin>>s[i]; } sort(s+1, s+n+1, comp); for (int i=1;i<=n;i++) { cout<<s[i]; } return 0; }