宁波网站建设yiso,电子商务网站系统建设实训心得,网站开发 微信 支付,qq刷赞网站推广[导读]#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后#xff0c;受到了广大老师和家长的好评#xff0c;非常感谢各位的认可和厚爱。作为回馈#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》#xff0c;这是解读系列的第42讲。
三位数组合#…
[导读]超平老师的Scratch蓝桥杯真题解读系列在推出之后受到了广大老师和家长的好评非常感谢各位的认可和厚爱。作为回馈超平老师计划推出《Python蓝桥杯真题解析100讲》这是解读系列的第42讲。
三位数组合本题是2020年9月20日举办的第12届蓝桥杯青少组Python编程选拔赛真题。题目要求编程统计所有三位数组合的个数要求三位数是奇数并且不能以0开头。
先来看看题目的要求吧。
一.题目说明
编程实现
用户输入一个正整数N(3 N 9)从0到N之间的所有正整数(包含0和N)中选择三个组成一个三位数(0不能作为百位数且这个三位数为奇数请计算出共有多少种满足条件的三位数组合。注意组成的每个三位数各个位上的数字不能重复
输入描述
输入一个正整数N(3 N 9
输出描述
输出满足条件的三位数组合的个数
样例描述
用户输入的正整数为3也就是将0,1,2,3四个数字进行组合符合要求的三位数为103, 123, 203, 213, 201, 231, 301, 321共8个所以输出8。
样例输入
3
样例输出
8
评分标准 5分能正确输出一组数据 5分能正确输出两组数据 7分能正确输出三组数据 8分能正确输出四组数据。
二.思路分析
这是一道简单的排列组合题目考查的知识点包括循环语句、条件语句、列表和取模运算等。
关于排列组合在之前的选拔赛和省赛中都出现过具体的分析可以参考如下两篇教程 《数字组合-第10届蓝桥杯省赛Python真题精选》 《排列组合-第11届蓝桥杯选拔赛Python真题精选》
都是排列组合因此我们可以使用枚举算法和组合函数两种方法来解决对于这类问题超平老师强烈建议使用组合函数。
当然本题的情况要更复杂一点主要有如下3点 待组合的数字和输入的N有关 0不能作为百位数 三位数必须为奇数
因此首先我们需要根据输入的整数N来构造列表然后使用permutations()函数生成三位数组合在生成组合的同时将百位数为0和奇数的三位数过滤掉。
思路有了接下来我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析我们编写程序如下 代码不多强调三点
1). 题目要求待排列数字包含0和N所以在使用range()函数的时候需要使用n1因为range()函数虎头蛇尾包含头不包含尾
2). 使用permutations()函数返回的是一个可迭代对象通常使用for..in进行遍历遍历时得到的t是元组
3). 元组t有3个元素直接使用下标访问t[0]表示百位t[1]是十位t[2]是个位当t[0] 0就构造三位数x如果x为奇数就加入到res列表中。
至此整个程序就全部完成了你也可以输入不同的数字来测试效果。
四.总结与思考
本题代码在10行左右涉及到的知识点包括 循环语句主要for...in循环 条件语句尤其是条件嵌套 列表和元组 组合函数
本题难度一般关键在于把问题分析清楚然后使用permutations()函数简化组合的过程同时将不符合要求的组合过滤掉。
如果不借助permutations()函数我们需要使用枚举算法通过嵌套循环来组合数字代码会麻烦一些。
两相对比你会发现使用permutations()函数代码要简洁不少这不正是Python的优点嘛它提供了大量好用的模块和库函数我们在学习Python的时候要多掌握这些函数的使用从而提高编程效率。
超平老师给你留一道思考题对于本题的测试数据有没有好的办法做到快速测试呢
你还有什么好的想法和创意吗也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助别忘了点赞和转发予人玫瑰手有余香
需要源码的可以移步至“超平的编程课”gzh。