组合和为N的数量-第13届蓝桥杯选拔赛Python真题精选

news2025/1/22 12:32:49

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第78讲。

组合和为N的数量,本题是2022年3月13日举办的第13届蓝桥杯青少组Python编程选拔赛真题编程部分第3题。题目要求将M个正整数中任意两个数进行组合,且求出每组组合的和, 请编程计算出M个正整数中有多少组组合的和恰好等于N。

先来看看题目的要求吧。

一.题目说明

编程实现:

给定一个正整数N和M个不同的正整数,然后将 M 个正整数中任意两个数进行组合,且求出每组组合的和, 问 M 个正整数中有多少组组合的和恰好等于N。

如:正整数N为6,M为5,5个不同的正整数分别为 1,2,3,4,5。

任意两数组合有10组:1 + 2,1 + 3,1 + 4,1 + 5,2 + 3,2 + 4,2 + 5,3 + 4,3 + 5,4 + 5, 其中和恰好等于6的组合有2组:1 + 5,2 + 4

输入描述:

第一行输入一个正整数N第二行输入M个不同的正整数,且正整数之间以一个英文逗号隔开

输出描述:

输出M个不同正整数中有多少组组合的和恰好等于N

样例输入:

5

1,2,3,4,5

样例输出:

2

02

二.思路分析

这是一道简单的算法题,涉及的知识点包括循环、列表、枚举算法等。

题目比较简单,其实就是两数之和问题,可以参考《两数之和-第12届蓝桥杯选拔赛Python真题精选》这篇教程。

之前也给出了三种典型的解决方案:

  • 暴力枚举

  • 组合函数

  • 单循环遍历

这3种解法比较简单,这里就不再介绍了。除此之外,还可以使用对撞指针算法来实现。

所谓对撞指针,是指使用两个指针left、right分别指向列表第一个元素和最后一个元素,然后left指针不断递增,right不断递减,直到两个指针的值相撞(即 left== right)为止,如图:

使用对撞指针,可以将时间复杂度降低到O(n),效率更高。

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

三.编程实现

根据上面的思路分析,我们使用三种方法来编写程序:

  • 枚举算法

  • 组合函数

  • 对撞指针

1. 枚举算法

枚举算法的思路,就是使用两层循环,找到所有的组合,代码如下:

图片

2. 组合函数

使用combinations()函数可以直接获取两个数的组合,从而简化代码,如下:

图片

3. 对撞指针

使用对撞指针的代码如下:

图片

代码不多,说明两点:

1). 使用对撞指针,需要确保列表是有序的,所以需要先使用sort()进行排序;

2). 对于任意的两个指针left和right来说,分三种情况,如果两数和等于n时,将cnt加1,两个指针都前进一步,如果两数和小于n,left右移,否则right左移,直到两个指针撞到一起了,循环结束。

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

四.总结与思考

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

  • 循环语句;

  • 列表操作;

  • 枚举算法;

  • 组合函数;

  • 双指针算法;

本题代码不多,难度一般,关键点是要掌握多种解决方案,尽量提高算法效率。

相信你已经发现了,两数之和问题出现的频率还挺高的。实际上,它是经典的算法入门题目,在著名的Leetcode网站中,第一题就是两数之和。

题目虽然简单,但是解决方案比较多,非常考验我们的基本功。

枚举是最基本的方法,但是效率不高;组合函数是Python给我们的福利,使用起来非常方便;对撞指针则是巧妙的算法,可以极大地提升算法效率,当然还有一些其他的解决方案,比如哈希算法。

既然提到了Leetcode,超平老师就顺便给你留一道思考题,就是Leetcode的第一题,两数之和。


给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

输入:nums = [2, 7, 11, 15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

 

你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。

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

需要源码的,可以移步至“超平的编程课”gzh。

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

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

相关文章

低代码选型要注意什么问题?

低代码选型时,确实需要从多个角度综合考虑,以下是根据您给出的角度进行的分析和建议: 公司的人才资源: 评估团队中是否有具备编程能力的开发人员,以确保能够充分利用低代码平台的高级功能和进行必要的定制开发。考察实…

Transformer系列:图文详解KV-Cache,解码器推理加速优化

前言 KV-Cache是一种加速Transformer推理的策略,几乎所有自回归模型都内置了KV-Cache,理解KV-Cache有助于更深刻地认识Transformer中注意力机制的工作方式。 自回归推理过程知识准备 自回归模型采用shift-right的训练方式,用前文预测下一个…

tinyrenderer-切线空间法线贴图

法线贴图 法线贴图分两种,一种是模型空间中的,一种是切线空间中的 模型空间中的法线贴图的rgb代表着每个渲染像素法线的xyz,与顶点坐标处于一个空间,图片是五颜六色的。 切线空间中的法线贴图的rgb同样对应xyz,是切线…

Django里多app

在 Django 里的某一个项目,里面得包含很多 App (功能),那么如何在该项目里管理这么多App呢? 先说明下背景:未先创建 apps 文件夹来存各个app文件夹,直接在项目文件目录里创建各个app。为了便于管理,得将各…

YOLOv10(2):网络结构及其检测模型代码部分阅读

YOLOv10(1):初探,训练自己的数据-CSDN博客 目录 1. 写在前面 2. 局部模块 (1)SCDown (2)C2fCIB (3)PSA(partial self-attention) 3. 代码解读 &#x…

【简单学习一下卷积神经网络】-基于肆十二的高考例子

前言一、白话卷积神经网络总结 前言 【参考】 主要是P2⇨手把手教你用tensorflow2训练自己的数据集 -------2024/5/4 一、白话卷积神经网络 高考前需要大量的做题训练---->相当于数据集。 做题过程中【于标准答案进行比对】产生的错题⇨loss(误差) 回…

数据新生态:Web3如何重新定义个人数据权利

随着数字化时代的不断深入,个人数据已经成为了现代社会中最宝贵的资源之一。然而,传统互联网时代下,个人数据往往被大型科技公司垄断、滥用,个人数据权利常常受到侵犯。而随着Web3技术的崛起,人们开始期待一种全新的数…

R_AARCH64_ADR_PREL_PG_HI21问题说明

目录 问题现象: 问题原因 问题机理 问题现象: 客户现场加载out文件出现如下问题: 打印“Relocation of type ‘R_AARCH64_ADR_PREL_PG_HI22…..’”,明确是ARDP指令引起的问题 问题原因 ARDP的寻址范围是4GB范围,加载的位置…

【用Python画画】六一儿童节画爱心

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、代码示例三、知识点梳理四、总结 一、前言 本文介绍如何使用Python的海龟画图工具turtle&#xf…

取代Windows的系统复制粘贴等文件处理

TeraCopy 可以到官网下载也可以通过应用商店下载 主要作用 : 取代Windows的系统复制粘贴等文件处理 常规窗口 点击第一排最左侧的按钮会显示这个窗口, 显示所以文件操作记录 , 这个也是我装这个软件的原因之一, 框选的是当前正在进行的 当执行复制粘贴时会自动出现, 让自行…

html three.js 引入.stl模型示例

1.新建一个模块用于放置模型 <div id"chart_map" style"width:800px;height:500px"></div> 2. 引入代码根据需求更改 <!-- 在head或body标签内加入以下链接 --> <script src"https://cdn.jsdelivr.net/npm/three0.137/build/t…

基于R语言BIOMOD2 及机器学习方法的物种分布模拟

BIOMOD2是一个R软件包&#xff0c;用于构建和评估物种分布模型&#xff08;SDMs&#xff09;。它集成了多种统计和机器学习方法&#xff0c;如GLM、GAM、SVM等&#xff0c;允许用户预测和分析物种在不同环境条件下的地理分布。通过这种方式&#xff0c;BIOMOD帮助研究者评估气候…

零刻SER8 AMD 8845Hs Ryzen AI 本地部署大语言模型教程!

零刻SER8 8845HS,配备了一个内置的 NPU&#xff08;神经网络处理单元&#xff09;&#xff0c;可以通过LM Studio语言大模型来部署己的 GPT 模型 AI 聊天机器人&#xff0c;AI 助手已迅速成为提高生产力、效率&#xff0c;甚至是头脑风暴的关键资源。在本地机器上运行 AI 聊天机…

前端列表可滚动,可轮播

前端列表可滚动&#xff0c;可轮播 <ulclass"scroll-list"ref"scroll_List"mouseenter"cancelScroll()"mouseleave"autoScroll()"><liclass"list-item"v-for"(item,index) in tableData3":class"[…

java现饱和,有必要去学其他语言吗?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「 java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;如果有时间总比不学好&…

虹科免拆诊断案例 | 2013 款路虎神行者 2 车偶发性无法起动

故障现象 一辆2013款路虎神行者2车&#xff0c;搭载2.0 L Si4 Petrol发动机&#xff0c;累计行驶里程约为4.5万km。车主反映&#xff0c;车辆偶发性无法起动&#xff0c;故障出现时&#xff0c;尝试起动发动机&#xff0c;组合仪表上会出现“挡位不在驻车挡”“充电系统故障”…

【Qt】 new成功,但是没有进入到构造函数。

NameTest工程中 nametest.cpp NameTest::NameTest() {pdata new privateAB; }NameTest::~NameTest() {if (pdata){privateAB *p (privateAB *)pData; //void *pdata nullptr;delete p;pdata nullptr;} }内部类&#xff1a; privateAB #include "private.h"#i…

密码学基本概念(补充)

BiBa模型的*特性规则&#xff1a;主体不能修改更高完整级的客体&#xff08;主题不能向上写&#xff09; Diffie-Hellman密钥交换协议的安全性基于求解离散对数的困难性&#xff0c;既对于C^d M mod P&#xff0c;在已知C和P的前提下&#xff0c;由d求M很容易&#xff0c;但是…

使用Nginx正向代理让内网主机通过外网主机访问互联网

目录 环境概述 流程说明 在外网服务器上安装部署nginx 安装前准备 下载nginx 编译安装nginx 开始配置正向代理 创建systemd服务单元文件&#xff0c;用于管理Nginx服务的启动、停止和重新加载 启动nginx 代理服务器本地验证 内网服务器验证 将代理地址添加到环境变量中…

地理加权回归GWR简介

地理加权回归GWR简介 一、定义&#xff1a; 地理加权回归&#xff08;Geographically Weighted Regression&#xff0c;简称GWR&#xff09;是一种空间数据分析方法&#xff0c;专门用于处理空间异质性&#xff08;spatial heterogeneity&#xff09;问题。以下是对GWR的详细简…