题目描述
设有 n 个正整数,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。
输入输出格式
输入格式:第一行有一个整数,表示数字个数 n。第二行有 n 个整数,表示给出的 n 个整数
输出格式:一个正整数,拼的最大整数
输入输出样例
输入
3
13 312 343
输出
34331213
题目解答
错误代码:
char类型函数
- strcat,+拼接
- strcmp,比较
- strcpy,=赋值
!!!错误代码,没考虑到strcmp的123>12,然而不应该这样
using namespace std;
#include <iostream>
#include <algorithm>
#include <cstring>
int main ()
{
int n,i,j;
cin>>n;
char a[n][15];
int f[n];
char r[100000]={0};
for(i=0;i<n;i++)
{
cin>>a[i];
f[i]=0;
}
int biao=0;
while(biao<n)
{
int maxi=0;
char max[20]={0};
for(i=0;i<n;i++)
{
if(f[i]==0)
{
strcpy(max,a[i]);
maxi=0;
break;
}
}
for(i=0;i<n;i++)
{
if(f[i]==0&&strcmp(max,a[i])<0)
{
strcpy(max,a[i]);
maxi=i;
}
}
f[maxi]=1;
strcat(r,max);
biao=biao+1;
}
cout<<r;
}
正确代码:
思路:像是a,b顺序变化,相互交换看a+b和b+a
- string a+b拼接
- string ><直接判断
- sort的函数返回正常顺序的true
参考CapW博主的代码,十分简单
using namespace std;
#include <iostream>
#include <algorithm>
#include <cstring>
bool cmp(string a,string b)
{
return (a+b>b+a);
}
int main ()
{
int n,i;
cin>>n;
string a[n];
for(i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n,cmp);
for(i=0;i<n;i++)
{
cout<<a[i];
}
}