网站店铺vr场景可以做吗网站标签中的图片怎么做的

当前位置: 首页 > news >正文

网站店铺vr场景可以做吗,网站标签中的图片怎么做的,平面设计案例图片,wordpress mysql d2rq[导读]#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后#xff0c;受到了广大老师和家长的好评#xff0c;非常感谢各位的认可和厚爱。作为回馈#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》#xff0c;这是解读系列的第85讲。 最大乘积和#… [导读]超平老师的Scratch蓝桥杯真题解读系列在推出之后受到了广大老师和家长的好评非常感谢各位的认可和厚爱。作为回馈超平老师计划推出《Python蓝桥杯真题解析100讲》这是解读系列的第85讲。 最大乘积和本题是2022年4月17日举办的第13届蓝桥杯青少组Python编程省赛真题编程部分第5题13届一共举办了两次省赛这是第一次省赛。题目要求对于N个正整数编程计算出所有乘积相加的数值最大的排列方式并输出数值。 先来看看题目的要求吧。 一.题目说明 编程实现 有N个正整数现对N个正整数进行不同方式的排列每次排列后都会按照以下规则进行一次计算聪明的小蓝发现排列方式不同最后计算出的结果也不相同。 计算规则 第一次第一个数乘以第二个数乘以第三个数结果记录为M(1)
第二次第二个数乘以第三个数乘以第四个数结果记录为M(2) ; 第三次第三个数乘以第四个数乘以第五个数结果记录为M(3) ; … 第N − 2次第N − 2个数乘以第N − 1个数乘以第N个数结果记录为M ( N − 2 ) 。 最后计算M(1) M(2) M(3) . . … . M(N − 2)的数值。找出一种排列方式使这个数值最大。 例如N 44个正整数分别为1234那么排列方式就会有24种其中排列方式为1342时按照规则计算2次1 × 3 × 4 123 × 4 x 2 24乘积相加12 24 36 这种排序方式是所有乘积相加的数值最大为36。 输入描述 输入N个正整数正整教之间一个英文逗号隔开。 输出描述 找出所有乘积相加的数值最大的排列方式并输出数值。 输入样例 1,2,3,4 输出样例 36 二.思路分析 这是一道和排列组合相关的算法题涉及的知识点包括循环、列表、排列函数、枚举算法和贪心算法等。 乍一看这不就是典型的组合排列问题嘛。 将N个正整数的全排列都列举出来逐个计算M(1) M(2)  … . M(N − 2)的值就可以得到最大值。 针对本题我给出两种解决方案 枚举算法 排列函数 贪心算法

  1. 枚举算法 排列函数 这个比较好理解就是先使用permutations()函数获取所有的排列然后使用循环分别计算每一种排列的乘积和通过比较找到最大值。 计算排列比较简单关键是针对每一种排列都要计算乘积和。为了方便可以使用自定义函数来处理从而简化代码结构。 2.贪心算法 从理解的角度来看使用排列函数是最佳方案但是随着数字规模的增加其缺点也越来越明显那就是算法的时间复杂度越来越高算法效率将大打折扣。 实际上还有一种更高效的方法这就是贪心算法。 假定有5个数字自左至右分别是abcde如图所示 它一共有3个乘法算式如下 M(1) a * b * cM(2)  b  c  dM(3)  c  d  e 很容易发现如下3条规律 两端的a和e都只参与了一次运算 左2的b和右2的d参与了两次运算 中间位置的c参与了3次运算
    随着数字个数的增加中间位置的数字可以有多个它们都需要参与3次运算。 很显然将最大的数字放在中间接下来每一次都找到当前最大的数字并和之前已经存放的最大数字紧挨着最小的数字放在两端这样就可以得到更大的乘积这不就是贪心算法的思想嘛。 接下来我们举例说明如果有4个数字分别是1、2、3、4那么肯定要将3和4放在中间1和2放在两端。 不过放在两端时需要考虑2的位置它既可以放在4的旁边也可以放在3的旁边肯定找最大的呀也就是2和4挨在一起可以得到更大的乘积即1、3、4、2如图 此时对于原列表[1, 2, 3, 4]来说处在奇数位的[1, 3]正序排列处在偶数位的[2, 4]逆序排列。 当然也可以排列成2、4、3、1效果一样如图 如果有5个数字分别是1、3、5、7、9其中9最大肯定放在正中间9旁边依次是7和5两端则分别是3和1如图所示 此时对于原列表[1, 3, 5, 7, 9]来说处在奇数位的[1, 5, 9]正序排列处在偶数位的[3, 7]逆序排列。 如果有6个数字分别是2、3、5、7、8、10最大的两个数8和10要放在中间紧接着7和10挨着5则和8挨着3和2分列两端如图 此时对于原列表[2, 3, 5, 7, 8, 10]来说处在奇数位的[2, 5, 8]正序排列处在偶数位的[3, 7, 10]逆序排列。 如果有7个数字分别是3、5、5、6、7、9、12则其排列如图所示 此时对于原列表[3, 5, 5, 6, 7, 9, 12]来说处在奇数位的[3, 5, 7, 12]正序排列处在偶数位的[5, 6, 9]逆序排列。 讲到这里相信聪明的你已经发现这其中的规律和奥妙了。 对于一个有序的序列先将处在奇数位的数字找出来顺序排列然后再将处在偶数位的数字找出来逆序排列构成一个新的列表就可以得到最大乘积和了。 所以对于输入的N个正整数我们可以通过如下4步进行处理 将列表进行排序 分别获取奇数位的数字和获取偶数位的数字 奇数位数字正序偶数位数字逆序构成一个新列表 分别计算M(1)、M(2)、…、M(n- 2)并求和
    思路有了接下来我们就进入具体的编程实现环节。 三.编程实现 根据上面的思路分析我们分别使用两种方法来实现 枚举算法 排列函数 贪心算法
  2. 枚举算法 排列函数 根据前面的思路分析编写代码如下 代码不多说明3点 1). 对n个数字获取全排列第一个参数为列表第二个参数是n 2). permutations()函数得到的是可迭代对象使用for循环来获取每一个对象该对象是元组 3). 在获取最大值的时候直接使用了max()函数。
  3. 贪心算法 根据前面的思路分析编写代码如下 代码不多强调3点 1). 在获取奇数和偶数列表的时候使用了带条件的列表推导式非常方便 2). 列表逆序直接使用切片运算[::-1]方便快捷 3). 在Python编程中可以直接将两个列表相加得到新的列表。 至此整个程序就全部完成了你可以输入不同的数据来测试效果啦。 四.总结与思考 本题代码在12行左右涉及到的知识点包括 循环语句 列表推导式 排列函数 枚举算法 贪心算法
    本题代码不算多但是难度不小关键点有两个一是灵活运用Python自带的排列函数快速解决问题二是分析乘法算式的特点找到数字排列的规律从而找到更高效的算法。 本题给出了两个解决方案方案一相对比较简单但并不是最优的方案大概率会出现超时情况因为它的时间复杂度太高了。 permutations()函数的时间复杂度取决于输入的数据大小对于包含n个元素的列表它会生成n的阶乘个排列因此其时间复杂度可以表示为O(n!)。 当n值很大时阶乘的增长非常快导致permutations()函数的性能会随着输入大小的增加而急剧下降。 你可以输入1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13来测试一下方法一的效果。 因此在数据较多的时候必须要考虑使用其他更高效的方法来避免计算所有排列。 而方案二则使用了贪心算法的思想找出数字排列的规律最后通过一次循环就可以计算出最大乘积和。 由于使用了排序函数因此其时间复杂度主要取决于sort()函数。在Python编程中sort()方法使用的是Timsort算法其时间复杂度为O(n log n)其中n是列表的长度。 Timsort算法由Tim Peters在2002年为Python编程语言提出的并已成为Python sort()方法和sorted()函数的默认排序算法。 Timsort算法是一种混合了归并排序和插入排序思想的排序算法针对不同情况下的数据集均具有较好的性能表现。 你还有什么好的想法和创意吗也非常欢迎和超平老师分享探讨。 如果你觉得文章对你有帮助别忘了点赞和转发予人玫瑰手有余香 需要源码的可以移步至“超平的编程课”gzh。