把列表里面的个位正整数组合成一个最大的整数
时间: 2023-05-19 17:01:04 浏览: 158
可以使用 Python 的 sorted 函数和 lambda 表达式来实现:
lst = [23, 45, 67, 89, 12, 34, 56, 78, 90]
lst.sort(key=lambda x: str(x)[-1], reverse=True)
result = int(''.join(map(str, lst)))
print(result)
输出结果为:9089767543452321
注意,这里使用了 str(x)[-1] 来获取每个数的个位数字,然后按照个位数字从大到小排序,最后将所有数字拼接成一个字符串,再转换为整数。
相关问题
读入一个正整数列表,每个正整数都只有一位,把这些列表里面的数字,按位数组织成一个最大的正整数,每个数字占据一位,不能重复使用,然后输出这个数字
可以用以下代码实现:
```
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
bool cmp(int a, int b){
string s1 = to_string(a);
string s2 = to_string(b);
return s1 + s2 > s2 + s1;
}
int main(){
int n, num;
vector<int> nums;
cin >> n;
for(int i = 0; i < n; i++){
cin >> num;
nums.push_back(num);
}
sort(nums.begin(), nums.end(), cmp);
string result = "";
for(int i = 0; i < nums.size(); i++){
result += to_string(nums[i]);
}
cout << result << endl;
return 0;
}
```
这个算法的核心是通过自定义函数 cmp 进行排序,将数字列表中的数字按位从大到小排序,再按照顺序组合成最大的整数返回。
读入一个正整数列表,每个正整数都只有一位。把这些列表里面的数字,按位数组织成一个最大的整数,每个数字占据一位,不能重复使用。然后输出这个数字。
分析:这个问题可以看成一个排序问题,将列表中的数字按照一定规则排序组合成一个整数。规则是将每个数字看成一个字符串,按照字符串拼接的大小比较大小,具体实现可以使用快速排序来进行。
代码实现(Python):
```
def quick_sort(nums):
if len(nums) < 2:
return nums
pivot = nums[0]
left = [x for x in nums[1:] if x+pivot > pivot+x]
right = [x for x in nums[1:] if x+pivot <= pivot+x]
return quick_sort(left) + [pivot] + quick_sort(right)
n = int(input())
nums = list(map(int, input().split()))
nums = sorted(nums, reverse=True)
nums = [str(x) for x in nums]
nums = quick_sort(nums)
print(''.join(nums))
```
首先读入列表长度和列表中的数字,将数字从大到小排序。将数字转换成字符串,使用快速排序按照大小排序。最后将排好序的数字拼接成一个字符串输出。
阅读全文