问题描述:设有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))
结果输出: