三位数组合-第12届蓝桥杯选拔赛Python真题精选_python三个单数组成三位数

文章介绍了如何用Python解决一个涉及排列组合的问题,即给定正整数N,找出所有符合条件(包含0且个位为奇数的三位数)的组合数。通过枚举和过滤实现,展示了编程实现的关键步骤和思路
摘要由CSDN通过智能技术生成

输入一个正整数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分:能正确输出四组数据。

二.思路分析

这是一道简单的排列组合题目,考查的知识点包括循环语句、条件语句、列表和取模运算等。

关于排列组合,在之前的选拔赛和省赛中都出现过,具体的分析可以参考如下两篇教程:

都是排列组合,因此我们可以使用枚举算法和组合函数两种方法来解决,对于这类问题,超平老师强烈建议使用组合函数。

当然,本题的情况要更复杂一点,主要有如下3点:

  • 待组合的数字和输入的N有关;
  • 0不能作为百位数;
  • 三位数必须为奇数;

因此,首先我们需要根据输入的整数N来构造列表,然后使用permutations()函数生成三位数组合,在生成组合的同时,将百位数为0和奇数的三位数过滤掉。

思路有了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们编写程序如下:

图片

代码不多,强调三点:

1). 题目要求待排列数字包含0和N,所以在使用range()函数的时候,需要使用n+1,因为range()函数虎头蛇尾(包含头不包含尾);

2). 使用permutations()函数,返回的是一个可迭代对象,通常使用for…in进行遍历,遍历时得到的t是元组;

3). 元组t有3个元素,直接使用下标访问,t[0]表示百位,t[1]是十位,t[2]是个位,当t[0] > 0,就构造三位数x,如果x为奇数,就加入到res列表中。

至此,整个程序就全部完成了,你也可以输入不同的数字来测试效果。

四.总结与思考

本题代码在10行左右,涉及到的知识点包括:

  • 循环语句,主要for…in循环;
  • 条件语句,尤其是条件嵌套;
  • 列表和元组;
    自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值