0
点赞
收藏
分享

微信扫一扫

洛谷1012 拼数(排序)

题目描述:

设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613

思路:
一开始直接用strcmp函数冒泡比较两个字符串的大小,但是忽略了当两个字符串分别是n和n+1的时候,前n个字符都一样,而最后一个n+1的字符比较小,这是strcmp函数会把长度为n+1的字符串放在前面,这就导致了错误,最后一个测试点WA。可以在每次比较前用一个中间的字符数组来把两个字符串拼接起来,然后在比较两种拼接方式后得到的新字符串的大小就好了。

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
char str[25][100], t[100];
char t1[100], t2[100];
int main()
{
int n, i, j;
scanf("%d", &n);
for (i=1; i<=n; i++){
scanf("%s", str[i]);
}
for (i=1; i<=n-1; i++){
for (j=1; j<=n-i; j++){
strcpy(t1, str[j]);
strcat(t1, str[j+1]);
strcpy(t2, str[j+1]);
strcat(t2, str[j]);
if (strcmp(t1, t2)<0){
strcpy(t, str[j+1]);
strcpy(str[j+1], str[j]);
strcpy(str[j], t);
}
}
}
// for (i=1; i<=n; i++){
// printf("%s\n", str[i]);
// }
for (i=1; i<=n; i++){
printf("%s", str[i]);
}
return 0;
}


举报

相关推荐

0 条评论