组合取球-2022年全国青少年信息素养大赛Python国赛第6题

news2024/11/28 12:48:07

 [导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛真题系列的第8讲。

全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设计与信息素养大赛”赛事之一,由中国电子学会主办,包含很多赛项,大赛自2013年举办,已连续成功举办八届,已正式入围“2022-2025学年面向中小学生的全国性竞赛活动名单”。 

大赛旨在激发广大青少年的科学兴趣和想象力,培养钻研探究、创新创造的科学精神和实践能力,促进青少年科技创新活动的广泛开展,发现和培养一批具有科研潜质和创新精神的青少年科技创新后备人才。

大赛主要竞赛类别包括电子科技、智能机器人、软件编程三类,全国青少年Python编程挑战赛就属于其中的软件编程类。

一.赛事说明

2021-2022年(第8届)Python挑战赛赛程分为初赛、复赛和总决赛三个阶段。初赛是资格赛,复赛是地方选拔赛,总决赛是全国各地选拔的精英汇聚在一起进行PK。

2021-2022年全国青少年Python编程挑战全国总决赛于2022年8月27日正式举行。一共是10道编程题,每道题100分,满分1000分,考试时间是120分钟。

10道编程题分别如下:

  • 分苹果

  • 韩信点兵

  • 借书问题

  • 四位数密码

  • 邮票面值

  • 取球

  • 统计连续字符

  • n的n次方

  • 海盗搜身

  • 父与子

超平老师将分10讲对每道题进行详细的解读和剖析,今天要解读的是第6题,组合取球。

二.题目描述

题目背景:

一个箱子里面存放着50个球,其中10个红色,10个黄色,30个蓝色。

现在从箱子里面任意取n个球,计算并输出不同颜色的球的数量组合一共有多少种可能性。

输入描述:

一个数字n

输出描述:

一个数字,可能的组合总数

样例输入:

2

样例输出:

6

注意:

input()内不添加任何参数

只有完全正确才可提交,若无法点击提交说明答题存在错误,可及时进行检查并修改

三.思路分析

粗略一看,这是一个组合问题,但是这不是一个在m个小球中选n个小球的简单组合,而是从3种不同颜色的小球堆中选出n个小球的复杂组合。

针对此类组合问题,通常有两种解决思路,一是使用枚举算法,二是使用组合的方法。组合方法难度相对要大一些,枚举则是更简单的实现方式,这里重点介绍枚举算法的思路。

我们假定红色球选x个,黄色球选y个,蓝色球选z个,根据题目的描述,x、y、z满足如下条件:

x + y + z = n
0 ≤ x ≤ 10  
0 ≤ y ≤ 10   
0 ≤ z ≤ 30

x + y + z  = n 就是数学中的三元一次方程式,它有多组解,比如,当n = 2时,可以有如下不同组合:


x = 2 y = 0 z = 0
x = 0 y = 2 z = 0
x = 0 y = 0 z = 2
x = 1 y = 1 z = 0
x = 1 y = 0 z = 1
x = 0 y = 1 z = 1

可以将他们以元组的形式保存到列表中,如下:

[ (2,0,0),(0,2,0),(0,0,2),(1,1,0),(1,0,1),(0,1,1)]

针对3个变量,我们使用枚举算法,也就是3层循环就可以实现。

接下来,我们进入具体的编程实现环节。

 

四.编程实现

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


# 获取数字n
n = int(input())
# 枚举算法
result = []
for x in range(10):
  for y in range(10):
    for z in range(30):
      if x + y + z == n and (x,y,z) not in result:
        result.append((x,y,z))
# 输出组合总数
print(len(result))

简单说明两点:

1). 为了避免重复组合,第9行代码做了去重处理;

2). 每一种组合,可以使用元组(x, y , z)来表示,也可以使用列表[x, y, z]来表示; 

运行程序,如果输入数字2,可以得到如下组合:

[(0,0,2),(0,1,1),(0,2,0),(1,0,1),(1,1,0),(2,0,0)]

如果输入数字3,可以得到如下组合:

[(0,0,3),(0,1,2),(0,2,1),(0,3,0),(1,0,2), 
  (1,1,1),(1,2,0),(2,0,1),(2,1,0),(3,0,0)]

五.总结与思考

本题难度中等,考查的知识点主要包括:

  • 输入输出函数;

  • 循环嵌套语句;

  • 列表操作;

  • 枚举算法;

善于思考的同学可能已经发现了,题目描述中有一条信息可能会产生干扰作用,这就是“箱子里面存放着50个球”。有些同学在分析思考的时候,会纠结如何在50个小球中取n个小球的问题上。

实际上,50个小球分成了3堆,分别是10个红色球、10个黄色球和30个蓝色球,然后分别从三堆小球中取球,如此一来,就自然而然想到枚举算法了。

如果你熟练掌握了列表推导式的用法,上面的代码,还可以进一步进化,如下:

n = int(input())
result = [(x,y,z) for x in range(10) for y in range(10) for z in range(30)  if x + y + z == n]
print(len(result))

除此之外,还可以itertools库中的product函数来解决,你知道是怎么实现的,赶紧动手试一下吧。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

更多教程请移步至“超平的编程课”gzh。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/741890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

教你如何自定义 Github 首页

一、创建自定义首页仓库 若要自定义首页,首先需要创建一个与你 Github ID 同名的仓库 创建完成后就可以开始为你的首页添加一些有趣的内容了,代码格式可以是 markdown 语法,也可以是 HTML 语法,但 HTML 的扩展性更强一点&#xf…

大唐京兆韦氏,两个老来发奋的诗人

在唐朝,诗人文学政治家如过江之鲫,有两个人物是绝对不可忽略的,那就是韦应物和韦庄。其中韦应物是韦庄的曾祖父。 京兆韦氏是整个唐朝时期最重要的士族家族之一,代有人才出,衣冠鼎盛,为关中望姓之首。韦氏…

I/O多复用函数(select、poll、epoll)

目录 一、select函数二、poll函数 select函数 int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);poll函数 int poll(struct pollfd *fds, nfds_t nfds, int timeout);epoll API epoll_create epoll_wait epoll_ctl一、sel…

Spring Boot 系列3 -- 日志文件

目录 1. 日志有什么用? 2. 日志的使用 2.1 得到日志对象 2.2 使用日志对象打印日志 3. 日志级别 3.1 日志级别的用途 3.2 日志级别的分类和使用 3.3 日志的打印规则 3.4 日志级别的设置 4. 日志持久化 5. 更简单的日志输出--lombok 6. 拓展1 lombok的原理 7. 拓…

SSM整合-1

SSM整合 创建工程SSM整合 2.1 Spring: SpringConfig 2.2 SpringMvc: ServletConfig、SpringMvcConfig 3.3 Mybatis JdbcConfig、MybatisConfig、jdbc.properties 3.功能模块 表与实体类 dao(接口自动代理) service(接口实现类) 业务层接口测试(整合Junit&#xff…

在vite创建的vue3项目中使用Cesium加载立体地形信息并调整初始化角度

在vite创建的vue3项目中使用Cesium加载立体地形信息并调整初始化角度 使用vite创建vue3项目 npm create vitelatestcd到创建的项目文件夹中 npm install安装Cesium npm i cesium vite-plugin-cesium vite -D配置 (1)在项目的vite.config.js文件中添加&am…

新手学习编程有什么注意事项?

为什么要学习如何编码? 世界正在成为一个地球村。编码是它发生的一个重要原因。 你应该学习如何编码的原因有很多,我将在这里触及其中的一些。 首先,学习编码可以大大提高你的分析和解决问题的能力。 您的收入潜力增加:有高级开…

NTIRE2023 图像复原和增强赛事Efficient Super-Resolution赛道冠军方案解读——DIPNet

DIPNet: Efficiency Distillation and Iterative Pruning for Image Super-Resolution 0. 简介 NTIRE 的全称为New Trends in Image Restoration and Enhancement Challenges,即“图像复原和增强挑战中的新趋势”,是CVPR(IEEE Conference on Computer V…

【JAVAEE】JVM中垃圾回收机制 GC

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE初阶 上篇文章我们讲了java运行时内存的各个区域。 传送门:【JavaEE】JVM的组成及类加载过程_xyk:的博客-CSDN博客 对于程序计数器、虚拟机栈、本地方法栈这三部分区域而言&#x…

6.S081——CPU调度部分(CPU的复用和调度)——xv6源码完全解析系列(10)

0.briefly speaking 终于到这里了,我们在之前阅读很多地方的内核代码时,总是习惯性地绕开CPU调度的部分(比如yield函数)。现在我们总算可以深入进去一探究竟了,这次总算是将整个操作系统中的一块重要拼图拼上去了。 有操作系统相关基础概念…

5 字符串拼接

5 字符串拼接作者: 赵晓鹏时间限制: 1S章节: 动态规划与贪心 输入说明 : 见问题描述。 输出说明 : 见问题描述。 输入范例 : aaaaaaaaaab aaaaaaaac aaaaaaaaaacaaaaaaaab 输出范例 : YES aa_________aaaaaaaab #include<iostream> #include<vector> using …

【数据分析 - 基础入门之pandas篇②】- pandas数据结构——Series

文章目录 前言一、Series的创建1.1 列表创建1.2 NumPy数组创建1.3 字典创建 二、Series索引2.1 显式索引2.2 隐式索引 三、Series切片2.1 显式切片2.2 隐式切片 四、Series基本属性和方法4.1 属性4.2 方法4.3 案例——使用 bool 值去除空值 五、Series运算六、Series多层行索引…

带你全面了解四大内存操作函数memset(),memcpy(),memmove(),memcmp()(附模拟实现)

内存操作函数 文章目录 内存操作函数memcpymemmovememcmpmemset 注&#xff1a;点击蓝色标题可以跳转到官方网站查看更权威的解析哦。 memcpy void * memcpy ( void * destination, const void * source, size_t num );函数memcpy从source的位置开始&#xff0c;向后复制num个…

Linux - CentOS 7 源码安装 MySQL 8.0.31

一、mysql-boost-8.0.31.tar.gz 源码下载 下载地址&#xff1a;https://dev.mysql.com 二、源码安装 MySQl 要求 cmake、Boost C库、ncurses库、OpenSSL库 //需要cmake3&#xff0c;gcc-5.3以上&#xff1b; 三、源码搭建 MySQL 环境 1、创建用户名和组 groupadd mysql …

ChatLaw团队招实习生啦!真格基金的创业、投资与AI详细指南;远程工作的8个安全法则;游戏开发者的数学教程 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 北大 ChatLaw 团队招聘实习生&#xff0c;开放算法和前后端岗位 ChatLaw 是一个开源的中文法律大模型&#xff0c;由北京大学与北大-兔…

vim编辑器中实现左边目录,右边内容布局的方法(vim插件:显示树形目录插件NERDTree安装和使用)

NERDTree&#xff1a;是Vim编辑器的文件系统资源管理器。使用此插件&#xff0c;用户可以直观地浏览复杂的目录层次结构&#xff0c;快速打开文件进行读取或编辑&#xff0c;并执行基本的文件系统操作。 它允许轻松浏览文件&#xff0c;并在不离开vim的情况下执行一些基本操作…

Spring Cloud的基本应用

上篇文章我们的eureka的集群已经搭建完毕,但是我们还没有开始使用,之前我们的page访问的方法是直接写死的,现在我们就可以改为集群的方式来写 Autowired//注册中心对应的客户端对象private DiscoveryClient discoveryClient;RequestMapping("query/{id}")public Prod…

基于51单片机的智能垃圾桶

功能&#xff1a; 本实例是基于51单片机为核心的智能垃圾桶仿真&#xff0c;主要由51单片机最小系统、L298N电机驱动电路、开盖电机、超声波传感器、红外测速模块、直流电机、红外人体传感器、LCD1602显示屏、震动传感器、按键电路构成。 1.系统的传感器主要用人体感应和机体震…

订单结算页+下单业务

一、订单结算页 1.业务分析 (1) 获取用户收货地址信息 一般的收货地址都是多个&#xff0c;使用时选中一个&#xff0c;所以收货地址使用List集合封装 (2)获取购物车商品信息 购物车商品也是多个&#xff0c;使用List集合封装 (3)查询商品库存 查询每个商品是否有库存&#…

VSCode安装及环境配置详细教程(windows版本)

目录 安装VSCode 安装Python 检查环境变量 检查Python是否能运行 VSCode环境配置 切换成简体中文 添加Python插件 编写代码运行 &#xff01;&#xff01;请先在官网下载Python和VSCode安装包&#xff0c;保存至本地 Python官网&#xff1a;https://www.python.org/do…