贪心算法练习

问题描述:设有n个正整数,将他们连接成一排,组成一个最大的多位整数。例如:n=4时,4个整数21, 8 , 901 , 6 连成的最大整数为:9018621。

贪心选择策略:

(1)将所有数字转化为字符串形式。

(2)将所有字符串按照长度从大到小排序。如果长度相同,则按照字典序从大到小排序。

(3)将排序后的字符串依次连接起来,得到最大的多位整数。

算法设计:

(1)将所有数字转化为字符串形式,存储在一个列表中。

(2)定义一个排序函数,按照字符串长度和字典序进行排序,使用排序函数对所有字符串进行排序。

(3)将排序后的字符串依次连接起来,得到最大的多位整数。

python代码实现:

 1 from filecmp import cmp
 2 def largest_number(nums):
 3 # 将所有数字转化为字符串形式
 4 str_nums = [str(num) for num in nums]
 5 # 定义一个排序函数,按照字符串长度和字典序进行排序
 6 def sort_func(s1, s2):
 7 if len(s1) != len(s2):
 8 return len(s2) - len(s1)
 9 else:
10 return cmp(s2, s1)
11 # 使用排序函数对所有字符串进行排序
12 sorted_str_nums = sorted(str_nums, key=lambda x: x, reverse=True)
13 # 将排序后的字符串依次连接起来,得到最大的多位整数
14 largest_num_str = ''.join(sorted_str_nums)
15 return largest_num_str
16 
17 nums = []
18 n = int(input("请输入整数的个数:"))
19 for i in range(n):
20 num = int(input("请输入第{}个整数:".format(i+1)))
21 nums.append(num)
22 print(largest_number(nums))

结果输出:

posted @ 2024-01-20 11:06  棒打鲜橙不加冰  阅读(10)  评论(0编辑  收藏  举报