不同气球排序问题
题目:
小明有一些气球想挂在墙上装饰,他希望相同颜色的气球不要挂在一起,写一个算法帮他得出一种可行的挂气球方式,自行定义函数,输入和返回,如果无法做到相同颜色的气球不要挂在一起,请定义合适的一场方式返回
解法:
- 记录所有颜色气球的总数
- 对各个颜色气球进行排序
- 若颜色最多的气球大于总数的一半,则无法做到相同颜色的气球不要挂在一起
- balloon_result 将所有气球装入 balloon_result 中
- 使用切片将排序好的数据一一插入 result 中
from random import randint
def balloon(data):
# 记录所有颜色气球的总数
count = 0
for i in data.items():
count += i[1]
# 对各个颜色气球进行排序
sort_balloon = sorted(data.items(), key=lambda x:x[1])
# 若颜色最多的气球大于总数的一半,则无法做到相同颜色的气球不要挂在一起
if count // 2 < sort_balloon[-1][1]:
return '无法做到相同颜色的气球不要挂在一起'
# balloon_result 将所有气球装入 balloon_result 中
balloon_result = []
for key, num in sort_balloon:
balloon_result.extend(key*num)
# 返回结果
result = ['']*count
# 使用切片将排序好的数据一一插入 result 中
result[::2], result[1::2] = balloon_result[:(count+1)//2], balloon_result[(count+1)//2:]
return result
if __name__ == "__main__":
data = {'r':randint(1, 10), 'g':randint(1, 10), 'b':randint(1, 10)}
print(data)
print(balloon(data))