中兴笔试 中兴秋招 中兴笔试题 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等多种语言做法集合指南