组成最大数
标题:组成最大数 | 时间限制:1秒 | 内存限制:65536K | 语言限制:不限
小组中每位都有一张卡片,卡片上是6位内的正整数,将卡片连起来可以组成多种数字,计算组成的最大数字。
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void strTok(const string numStr, vector<string> &numArr){
int pos = 0;
int cnt = 0;
for (int i = 0; i < numStr.size(); ++i){
if (numStr[i] == ','){
numArr.push_back(numStr.substr(pos, cnt));
pos = i + 1;
cnt = 0;
}
else{
cnt += 1;
}
}
numArr.push_back(numStr.substr(pos, cnt));
}
int main(){
string numStr;
cin >> numStr;
vector<string> numArr;
strTok(numStr, numArr);
sort(numArr.begin(),numArr.end(),[](string x, string y)
{
return x + y > y + x;
});
for (int i = 0; i < numArr.size(); ++i){
cout << numArr[i];
}
return 0;
}
def judgeStr(str1,str2):
sum1 = str1 + str2
sum2 = str2 + str1
if sum1 >= sum2:
return True
else:
return False
def biggestNum(list_str):
for i in range(len(list_str)):
for j in range(len(list_str)):
if j > i:
if judgeStr(list_str[i],list_str[j]) == False:
list_str[i],list_str[j] = list_str[j],list_str[i]
print(''.join(list_str))
while True:
try:
str1 = input().strip()
list_str = str1.split(',')
biggestNum(list_str)
except:
break
from functools import cmp_to_key
def compare(a, b):
return 1 if int(a + b) < int(b + a) else -1
while True:
try:
num_list = sorted(input().split(","), key=cmp_to_key(compare))
print("".join(num_list))
except:
break
import java.util.Scanner;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
import java.io.BufferedReader;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = null;
while(sc.hasNext()){
input = sc.nextLine();
String[] str = input.split(",");
List<String> list = Arrays.asList(str);
list.sort((next, pre) ->next.length() == pre.length() ? pre.compareTo(next) : (pre+next).compareTo(next + pre));
StringBuffer strBu = new StringBuffer();
for(String li: list){
strBu.append(li);
}
System.out.println(strBu);
}
}
}
查看2道真题和解析