首页 > 试题广场 >

题2

[编程题]题2
  • 热度指数:822 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个数组由一些非负整数组成,现需要将他们进行排列并拼接,使得最后的结果最大,返回值需要是string类型 否则可能会溢出

输入描述:
一行数字间,以逗号分割


输出描述:
一个字符串
示例1

输入

30,1

输出

301
Python3
s = input()
s=s.split(',')
s.sort(reverse=True)
res = ''.join(s) if res[0] == '0': print('0') else:  print(res)

发表于 2019-11-29 15:05:07 回复(4)
#include<bits/stdc++.h>
using namespace std;
bool cmp(string a,string b){
    return a+b>b+a;
}
int main(){
    string sum;
    string str;
    while(cin>>str){
    str+=',';
    int start=0;
    vector<string> res;
    for(int i=0;i<str.length();i++){
        if(str[i]==','){
            string ans=str.substr(start,i-start);
            res.push_back(ans);
            start=i+1;
        }
    }
        sort(res.begin(),res.end(),cmp);
        for(int i=0;i<res.size();i++){
            sum+=res[i];
        }
        if(sum[0]=='0') cout<<'0'<<endl;
        else cout<<sum<<endl;
        }
  }

发表于 2020-08-14 10:57:54 回复(0)
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int main(){
    string ans;
    vector<string> nums;
    char c = '0';
    do{
        int tmp;
        cin >> tmp;
        nums.emplace_back(to_string(tmp));
        c = getchar();
        while(c == ' '){
            c = getchar();
        }
    }while(c != '\n');
    sort(nums.begin(), nums.end(),[&](string a, string b){
        return a+b > b+a;
    });
    if(nums[0] == "0"){
        ans = "0";
    }
    else{
        for(auto ss : nums){
        ans += ss;
        }
    }
    
    cout << ans << endl;
    return 0;
}


编辑于 2021-09-09 10:49:42 回复(0)
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while((line = br.readLine()) != null) {
            String[] arr = line.trim().split(",");
            Arrays.sort(arr, new Comparator<String>(){
                @Override
                public int compare(String s1, String s2){
                    return -(s1 + s2).compareTo(s2 + s1);
                }
            });
            StringBuilder result = new StringBuilder();
            for(String num: arr)
                result.append(num);
            if(result.toString().charAt(0) == '0')
                System.out.println("0");
            else
                System.out.println(result.toString());
        }
    }
}

发表于 2020-10-14 16:18:44 回复(0)
虽然很丑,但是能过
def crank(a, b):
    if (int(a + b)) > (int(b + a)):
        return 1
    else:
        return 0
rank = {}
time = 0
num = list(map(str, input().split(',')))
chongfu = {}
for i in range(len(num)):
    for j in range(i, len(num)):
        chongfu[num[i]] = chongfu.get(num[i],1)
        if num[i] == num[j] and i != j:
            chongfu[num[i]] = chongfu.get(num[i], 0) + 1
            num[i] = '0'
for i in range(len(num)):
    for j in range(len(num)):
        rank[num[i]] = rank.get(num[i], 0) + crank(num[i], num[j])
rank = sorted(rank.items(), key = lambda item:item[1], reverse = True)
if rank[0][0] != '0':
    for i in range(len(rank)):
        while(time != chongfu.get(rank[i][0],0)):
            print(rank[i][0], end = '')
            time += 1
        time = 0
else:
    print(0)


发表于 2020-09-04 13:53:50 回复(0)
#include<bits/stdc++.h>
(755)#define ll long long
using namespace std;
ll sum;
vector<string> s;

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

int main(){
    string str,tmp;
    cin>>str;
    str+=',';
    int len=str.length();
    int cnt=0,maxlen=0;
    for(int i=0;i<len;i++){
        if(str[i]==','){
            s.push_back(tmp);
            cnt++;
            int pp=tmp.length();//不能直接写到max里比,要强制类型转换
            maxlen=max(pp,maxlen);
            tmp.clear();
            continue;
        }
        tmp+=str[i];
    }
    for(int i=0;i<cnt;i++){
        int temp=maxlen-s[i].length();
        while(temp){
            s[i]+='~';
            temp--;
        }
    }
    sort(s.begin(),s.end(),cmp);
    string ans;
    for(int i=0;i<cnt;i++){
        s[i].erase(std::remove(s[i].begin(), s[i].end(), '~'), s[i].end());
        ans+=s[i];
    }
    if(ans[0]=='0') cout<<'0';
    else cout<<ans;
    return 0;
}

发表于 2020-03-14 21:14:43 回复(0)