中兴笔试 中兴秋招 中兴笔试题 0925
笔试时间:2025年9月25日
往年笔试合集:
第一题
题目描述: 给定一个正整数及非负整数 nums 的列表,第一个正整数表示 nums 列表中数字的总个数,需要将 nums 列表中数据排列组合出一个最大的数并返回它。
输入描述
输入两行数字,第一行仅有一个数字,代表待组合数据的总个数,第二行是待组合的数字的集合,数据之间使用空格间隔
输出描述
输出能组成最大的值
样例输入
3
1 3 2
样例输出
321
参考题解
解题思路:这道题的目的是将给定的数字列表重新排列,组合成一个最大的整数。关键在于自定义排序规则:
- 对于任意两个数字 a 和 b,如果将它们转换成字符串后,a+b(字符串拼接)大于 b+a(字符串拼接),那么在最终结果中,a 就应该排在 b 的前面
- 例如:3 和 30 组合,可以是 330 或 303。因为 330 > 303,所以 3 应该排在 30 的前面
- 处理特殊情况:如果结果全是0,应该返回"0"而不是"00"
C++:
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int n;
while (cin >> n) {
vector<string> numsStr(n);
for (int i = 0; i < n; i++) {
cin >> numsStr[i];
}
// 自定义排序
sort(numsStr.begin(), numsStr.end(), [](const string& s1, const string& s2) {
return s1 + s2 > s2 + s1;
});
// 拼接结果
string result = "";
for (const string& s : numsStr) {
result += s;
}
// 处理特殊情况
if (result[0] == '0') {
cout << "0" << endl;
} else {
cout << result << endl;
}
}
return 0;
}
Java:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
// 1. 读取输入
int n = Integer.parseInt(scanner.nextLine());
String[] numsStr = scanner.nextLine().split(" ");
// 2. 自定义排序
Arrays.sort(numsStr, (s1, s2) -> (s2 + s1).compareTo(s1 + s2));
// 3. 拼接结果
StringBuilder sb = new StringBuilder();
for (String s : numsStr) {
sb.append(s);
}
String result = sb.toString();
// 4. 处理特殊情况
if (result.startsWith("0")) {
System.out.println("0");
} else {
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025 春招笔试合集 文章被收录于专栏
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南
查看5道真题和解析