首页 > 编程语言 >场景编程集锦-应对能源危机

场景编程集锦-应对能源危机

时间:2023-01-07 17:33:00浏览次数:40  
标签:路灯 formula2 formula1 combination 编程 语句 能源危机 集锦 阶乘

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

相关文章

  • Golang入门到实战核心编程-第四章-运算符
    目录1.运算符介绍2.算数运算符2.1算数运算符介绍2.2算数运算符一览2.3算数运算符案例2.4算数运算符细节说明3.关系运算符3.1关系运算符介绍3.2关系运算符一览3.3......
  • Golang入门到实战核心编程-第三章-变量
    目录1.Golang数据类型分类2.数据类型的默认值3.数据类型及大小3.1查看变量的数据类型3.2查看变量占用字节大小4.数据类型介绍4.1整数类型4.1.1整型各个类型对比4.1......
  • C++ - TCP/UDP网络编程
    前言socket编程分为TCP和UDP两个模块,其中TCP是可靠的、安全的,常用于发送文件等,而UDP是不可靠的、不安全的,常用作视频通话等。如下图:头文件与库:#include<WinSock2.h>......
  • 2023年01月编程语言流行度排名
    点击查看最新编程语言流行度排名(每月更新)2023年01月编程语言流行度排名编程语言流行度排名是通过分析在谷歌上搜索语言教程的频率而创建的一门语言教程被搜索的次数越多......
  • 003.函数式编程(函数式接口Predicate)
    1.函数式接口Predicate  2.代码示例packagecom.imooc.lambda;importjava.util.Arrays;importjava.util.List;importjava.util.function.Predicate;/**......
  • Jody在编程
    如果说编程语言是一种人与机器的交流,那么普通的文字,话语就是心灵的交汇。虽然关于交流沟通的书我没有看过几本,但是基础的逻辑还是了解的。之所以这样开篇,是因为基于文字......
  • python网络编程
    网络编程1软件开发架构、网络编程简介、OSI七层协议以及网络相关设施2TCP/IP协议、Socket套接字以及黏包问题的解决方案3UDP协议、多道技术、进程理论以及同步异步、......
  • C#可扩展编程MEF Managed Extensibility Framework
    MEF-ManagedExtensibilityFramework是用于创建轻量,可扩展应用程序的库.我们可以理解为它的主要作用是解耦,它让开发人员得以轻松的封装代码并避免强依赖性.MEF让......
  • 极客编程python入门-内建模块base64
    base64Base64是一种用64个字符来表示任意二进制数据的方法。用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,......
  • [Java 8] (1) 函数式编程简介
    思维方式的转变以从一个城市集合中寻找是否存在Chicago为例:习惯的方式booleanfound=false;for(Stringcity:cities){if(city.equals("Chicago")){......