1. 场景描述
受俄乌战事的影响,全球能源价格上涨,引发欧盟地区通胀加剧。许多国家和地区面临着汽车加油站缺油断气、电力供应紧张、工业和生活燃气短缺等严峻形势,为了应对能源危机给经济和生活带来的冲击和影响,欧洲各国政府纷纷出台应对策略和措施。在这些措施中包括:重启一批曾经关闭的高能耗、高排放的火力发电厂,下调空调室温2度,鼓励民众缩短洗澡时间,大力提倡低碳出行,降低压缩市政用电以及调整城市路灯照明。昔日火树银花、繁华热闹的打卡的圣地巴黎香榭丽舍大街,如今也是灯火阑珊,光影暗淡,使人隐约感到经济萧条和衰退的来临。显而易见,由于能源短缺原因,对于欧洲地区的大部分民众来说,恐怕要度过一个寒冷的冬天了。
在以上应对能源危机的具体措施中涉及到了调整城市路灯照明节约电力资源的问题。事实上调整城市路灯的亮灯时间,优化路灯的亮灯组合,的确能够达到减少用电量,节约电力资源的目的。经过有关实验证明:由于城市路灯间距较小,10盏相连的路灯照明效果和7盏路灯的照明效果是相同的。如果要节约电力资源,只需要利用科学合理的方式进行调整,关闭其中的3盏路灯就可以了。在调整中要注意不要关闭首灯、尾灯以及与其相连的灯。通过这样的调整方式,城市路灯的照明效果不仅不会受到影响,而且还能实现节能环保,降低城市供电压力。现在聚焦点在于:要实现上述目标,究竟有多少种路灯调整方案呢?
2. 编程思路
要解决上述问题,需要用到数学中的排列组合方法和公式。10盏点亮的路灯要灭掉3盏,况且不能关闭首灯、尾灯以及与其相连的灯,其实就是要在剩下的6盏灯中关闭3盏,这是一个6选3的一个排列组合问题,在数学上表示为:$C^3_6$ ,因此我们只需套用排列组合的公式就可以了。其公式如下所示:
$C^m_n=\frac{n!}{m!(n-m)!}$
下面我们要通过python编程来实现排列组合数计算的通用函数。
3. 代码实现
"""
energy_crisis.py : 应对能源危机
"""
def formula1(n):
"""循环实现的阶乘"""
product = 1
for x in range(n): # ①
product *= x + 1 # ②
return product
def formula2(n):
"""递归实现的阶乘"""
if n == 1: # ③
return 1
return n * formula2(n - 1) # ④
def combination(n, m, method=1):
"""
计算从 n个元素中挑选 m个元素的组合数
"""
if method == 1:
result = formula1(n) / (formula1(m)*formula1(n-m)) # ⑤
else:
result = formula2(n) / (formula2(m)*formula2(n-m)) # ⑥
return int(result)
def main():
# 循环实现阶乘
print('路灯调整方案数:', combination(6, 3)) # ⑦
# 递归方式阶乘
print('路灯调整方案数:', combination(6, 3, 2)) # ⑧
if __name__ == '__main__':
main()
在以上程序代码中,编写了4个函数:formula1()/formula2()实现阶乘计算,combination()函数用于计算组合数,main()函数完成路灯调整方案计算,它是整个程序的入口。其中:函数formula1()和函数formula2()采用了2种不同的方式实现阶乘计算功能。 语句①和语句②共同完成阶乘的计算。 语句③是递归终止条件,语句④重复进行递归调用。 语句⑤通过调用formula1()实现的组合数计算。 语句⑥采用调用formula2()完成的组合数运算。 语句⑦调用函数combination(6,3),计算从6盏点亮的路灯中挑选出3盏灯关闭的组合数,使用默认参数method=1。 语句⑧语句⑦相似,调用函数combination(6,3,2),计算从6盏点亮的路灯中挑选出3盏灯关闭的组合数,这一次调用使用了参数method=2,内部调用了通过递归方法实现的阶乘函数formula2()。
4. 执行效果
D:\cases\应对能源危机>python energy_crisis.py 路灯调整方案数: 20 路灯调整方案数: 20
D:\cases\应对能源危机>
从程序执行情况可知,共有20种路灯调整方案,均可达到节约电力资源的目标。在main()函数中,测试了计算组合的两种方法:combination(6,3)以及combination(6,3,2),程序的运行表明它们计算的结果完全一致。
5. 项目扩展
通过计算机程序采集光照亮度传感器数据,实现城市照明工程的智能化控制,也是节约电力资源非常有效的技术创新手段。
标签:路灯,formula2,formula1,combination,编程,语句,能源危机,集锦,阶乘 From: https://blog.51cto.com/u_12757888/5995695