链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
设有n个正整数(n ≤ 20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
输入描述:
第一行,一个正整数n。 第二行,n个正整数。
输出描述:
一个正整数,表示最大的整数
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int main()
{
int n,i,j;
string a[25],c;
scanf("%d",&n);
for(i=0;i<n;i++)
{
cin>>a[i];
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j]+a[j+1]<a[j+1]+a[j])
{
c=a[j];
a[j]=a[j+1];
a[j+1]=c;
}
}
}
for(i=0;i<n;i++)
{
cout<<a[i];
}
return 0;
}
运用贪心算法找出局部最优解,再找出最终解。本题需要构造a[i]+a[i+1]与a[i+1]+a[i]进行比较。