题目描述
设有 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];
}
}
本文探讨了如何从一组整数中通过特定的排序算法拼接出最大可能的整数。介绍了错误的实现方式及其问题,并给出了正确的解决方案,利用字符串拼接和自定义排序函数实现。
19万+

被折叠的 条评论
为什么被折叠?



