拼数
错误代码
#include<iostream>
#include<algorithm>
using namespace std;
int judge (string a, string b, int x)
{
if (x>=max (a.length (), b.length ()))
return -1;
if (a[x]>b[x])
return 1;
else if(a[x]<b[x])
return 0;
else if (a[x]==b[x])
return judge (a, b, x+1);
}
int main ()
{
string str[25];
int n;
cin>>n;
for (int i=0; i<n; i++)
cin>>str[i];
for (int i=0; i<n; i++)
{
for (int j=i+1; j<n; j++)
{
if (judge (str[i], str[j], 0)==0)
{
string a=str[i];
str[i]=str[j];
str[j]=a;
}
}
}
for (int i=0; i<n; i++)
cout<<str[i];
}
附: 代码运行情况图
.通过在网上搜索, 我好像知道错误在哪里了, 现给出具体数据
测试一
输入:
2
30 300
理论输出: 30300
实际输出: 30030
测试二
输入:
2
15 153
理论输出: 15315
实际输出: 1531
这个测试数据好像并没有错, 但是放在这里供其他同学参考.
综上所述, 我们就找到了问题的所在, 基于本程序的bug且此bug不易修复, 所以果断放弃此思路, 另寻其他思路.
正确代码
#include<iostream>
#include<algorithm>
using namespace std;
string str[25];
bool cmp(string a,string b)
{
return a+b>b+a;
/*自定义排序函数, 这一步非常巧妙.
假设a=321, b=32
则: a+b=32132,b+a=32321
这样下面sort排下来就是32>321避免出现32132>32321的情况
恰好可以解决上一个程序出现的错误.
*/
}
int main()
{
int n;
cin>>n;
for(int i=0; i<n; i++)
cin>>str[i];
sort(str,str+n,cmp);
for(int i=0; i<n; i++)
cout<<str[i];
}