关于#c++#的问题:输出:一个正整数,表示最大的整数样例输入13 312 343【样例输出】34331213我的思路是用string来做然后做个循环判断

设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
输入:第一行,一个正整数n。第二行,n个正整数。
输出:一个正整数,表示最大的整数
样例输入
3
13 312 343
【样例输出】
34331213
我的思路是用string来做然后做个循环判断

该回答引用chatgpt

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

bool cmp(string a, string b) {
    return a + b > b + a;
}

int main() {
    int n;
    cin >> n;
    string num[25];
    for (int i = 0; i < n; i++) {
        cin >> num[i];
    }
    sort(num, num + n, cmp);
    for (int i = 0; i < n; i++) {
        cout << num[i];
    }
    cout << endl;
    return 0;
}



#include<iostream>
#include<string>
using namespace std;
bool compare(string a,string b)
{
    if(a+b>=b+a)//ab>=ba,这个时候不需要交换
    {
        return false;
    }
    return true;//ab<ba,这个时候需要交换
}

int main()
{
    int n;
    cin>>n;
    string arr[20],temp;

    for(int a=0;a<n;a++)
    {
        cin>>arr[a];
    }


    for(int i=0;i<n-1;i++)
    {
        for(int j=n-1;j>i;j--)
        {
            if(compare(arr[j-1],arr[j]))    //如果为true则交换,
            {
                temp=arr[j];
                arr[j]=arr[j-1];
                arr[j-1]=temp;
            }
        }
    }
    for(int k=0;k<n;k++){
        cout<<arr[k];
    }
    cout<<endl;
    return 0;
}

代码如下:


#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

bool cmp(string a, string b) {
return a + b > b + a;
}

int main() {
int n;
cin >> n;
string a[100];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a, a + n, cmp);
for (int i = 0; i < n; i++) {
cout << a[i];
}
return 0;
}

根据你的问题描述,需要输入整数n 然后输入n个整数,在拼接成一个最大的数,实现时可以按你的思路用字符串来判断,而且应该用字符串来判断,比如,123和3 就应该3在前面123在后面,这里就可以用字符串取数字的第一个数字,大的放在前面,小的放后面。所以你可以写一个方法,可以直接找一个冒泡排序或者什么排序的代码来修改,把判断大小那里修改为比较字符串第一个数字就行,对所有数字排完序后,循环拼接就行了。望采纳

供参考:

#include <stdio.h>
#include <string.h>
int main()
{
    char t[30],s[21][30];
    int i,j,n;
    scanf("%d",&n);
    for (i = 0;i < n;i++)
        scanf("%s", s[i]);
    for(i = n-1;i > 0; i--)
    {
        for(j = 0;j < i; j++)
        {
            if(strcmp(s[j],s[j+1]) < 0){
                strcpy(t,s[j]);
                strcpy(s[j],s[j+1]);
                strcpy(s[j+1],t);
            }
        }
    }
    for (i = 0;i < n;i++)
        printf("%s",s[i]);
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^