小朋友分糖果-第13届蓝桥杯选拔赛Python真题精选

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

小朋友分糖果,本题是2022年3月13日举办的第13届蓝桥杯青少组Python编程选拔赛真题编程部分第4题。有N个小朋友从左到右排成一排,每个小朋友手中都有一定数量的糖果,且糖果总数量是N的倍数。 请编程计算出最少调整几次可以使每个小朋友的糖果数量相同。

先来看看题目的要求吧。

一.题目说明

编程实现:

有N个小朋友从左到右排成一排,每个小朋友手中都有一定数量的糖果,且糖果总数量是N的倍数。计算出最少调整几次可以使每个小朋友的糖果数量相同。

调整规则如下:

规则 1:每个小朋友的糖果只能调整到左右相邻的两个小朋友手中;

规则 2:第一个小朋友的糖果只能调整到第二个小朋友手中;

规则 3:最后一个小朋友的糖果,只能调整到倒数第二个小朋友手中。

例如:1~3 号小朋友原有糖果数量分别为6,4,2。

图片

1)1号小朋友拿出两块给2号小朋友;

2)2号小朋友拿出两块给3号小朋友; 两次操作后三个小朋友手中糖果分别为 4,4,4。

即按照调整规则最少操作2次可以使3个小朋友手中糖果数量都相同。

现按照顺序给出1 ~ N号小朋友手中原有糖果数量,按照调整规则计算出最少调整几次可以使小朋友手中的糖果数量都相同。

输入描述:

输入N个正整数(1 < 正整数 < 100),表示1到N号小朋友手中原有糖果数量,正整数之间以一个英文逗号隔开,且所有正整数之和是N的倍数

输出描述:

按照调整规则计算出最少操作几次可以使小朋友手中糖果数量都相同

样例输入:

6,4,2

样例输出:

2

二.思路分析

这是一道算法题,涉及的知识点包括循环、条件、列表和模拟算法等。

糖果是每个小朋友都非常喜欢的零食,分糖果也是我们非常熟悉的场景。

图片

对于本题中所描述的调整规则,如何保证调整次数最少呢,这其中又有什么规律和奥妙呢?

还是从实际案例入手吧,假设有5个小朋友,糖果数量分别为6, 4, 3, 1, 1,如图:

图片

总糖果数量为15,平均下来,每个小朋友可以分得3颗糖果。

其调整过程如下:

图片

看起来非常简单,都是从左边往右边调整,这是因为糖果数量是一个递减数列。

它有这么一个特点:处在左侧的小朋友糖果数量大于平均值,处在右侧的小朋友数量小于平均值。

所以,我们只需要从左到右依次调整,每一个小朋友只需要保留3颗糖果,其余的给到右边相邻的小朋友。

再调整一下顺序,如果5个小朋友的糖果数量依次是1, 1, 3, 4, 6,会是什么情况呢?

图片

其实很简单,换个顺序,从右到左就可以了,如图所示:

图片

继续调整顺序,如果5个小朋友的糖果数量是1, 3, 6, 1, 4呢,又该如何调整呢?

是从左到右,还是从右到左,亦或是从中间开始呢?

由于数据不具备单调性(递增或递减),无法通过一次从左到右或从右到左进行调整,需要分两次调整。

不妨先从左到右进行调整,由于第1个、第2个小朋友的糖果数量小于平均值3,因此保持不动。

第3个小朋友的糖果数量为6,需要调整,关键是向右调整多少颗呢?

有的同学可能会说3颗,自己保留3颗嘛。

不对,如果向右调整3颗的话,呆会儿还得调整回来,实际情况应该是右边缺多少,就调整多少。

右边还有两个小朋友,一共5颗糖果,还缺1颗,所以只需要向右调整1颗就行,如图所示:

图片

然后再换个方向, 从右到左进行调整,规则还是一样的,左边缺多少就调整多少,如图所示:

图片

从左到右调整了1次,从右到左又调整了3次,一共需要调整4次。

综合上述三种情况,我们可以统一处理,分两步:

1). 从左到右依次处理,如果当前糖果数量 > 平均值,则计算右边需要多少颗糖果并调整;

2). 从右到左依次处理,如果当前糖果数量 > 平均值,则计算左边还需要多少颗糖果并调整。

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

三.编程实现

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

图片

代码不少,强调三点:

1). 在遍历每一个小朋友的时候,都需要计算左侧和右侧需要的总糖果数量,直接使用列表的切片运算结合sum()函数即可;

2). 调整的条件有两个,一个是当前糖果数量 > 平均值,二是右侧或左侧还缺少糖果,二者缺一不可;

3). 糖果只能给到左边和右边相邻的小朋友,不能跳过。

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

四.总结与思考

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

  • 循环语句;

  • 条件语句;

  • 列表操作;

  • 枚举算法;

本题代码不少,难度也较大,关键在于如何找到调整糖果的逻辑,我们可以通过举例法,找到其通用规律。

本题涉及到算法有两个,一是枚举算法,二是模拟算法。

枚举算法比较简单,就是使用循环把所有的情况都列举出来进行相应的处理。

模拟算法,就是利⽤计算机对⼀个过程进⾏模拟,并从中得出答案。比如,可以使用计算机模拟抛硬币得到正反面概率的情况,又比如模拟掷骰子、猜数字游戏等。

通常来说,模拟算法并没有固定的套路,具体问题需要具体分析。可以使用有代表性的数据来模拟解决问题的过程,找出其核心逻辑和通用规律。

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

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

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

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

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

相关文章

数学电路与电子工程3(MEE)—— 同步和异步时序电路、初始化触发器

同步和异步时序电路是时序电路的两大主要类型&#xff0c;它们在设计和工作原理上有着明显的不同&#xff1a; 1 同步时序电路 这类电路包含一个时钟信号&#xff0c;用来同步整个系统中数据的进展。这意味着数据的传输和处理是在时钟信号的特定边缘&#xff08;上升沿或下降沿…

爬虫之反爬思路与解决手段

阅读时间建议&#xff1a;4分钟 本篇概念比较多&#xff0c;嗯。。 0x01 反爬思路与解决手段 1、服务器反爬虫的原因 因为爬虫的访问次数高&#xff0c;浪费资源&#xff0c;公司资源被批量抓走&#xff0c;丧失竞争力&#xff0c;同时也是法律的灰色地带。 2、服务器反什么…

Cy5.5-甘氨鹅去氧胆酸荧光染料标记物:一种生物成像工具

在现代生物研究和医学诊断领域&#xff0c;荧光染料标记物扮演着举足轻重的角色。它们能够实现对生物体内特定分子或细胞的非侵入性、实时追踪&#xff0c;从而为我们揭示生命过程的奥秘提供工具。 Cy5.5-甘氨鹅去氧胆酸荧光染料标记物的结构与特性 Cy5.5-甘氨鹅去氧胆酸荧光染…

水库大坝安全监测系统打通监控数据“最后一公里”

一、概述 我国有水库8万座左右&#xff0c;其中土石坝多数&#xff0c;病险水库占水库也很多。众所周知&#xff0c;水库在防洪、兴利上具有重要的调节作用&#xff0c;如何保证水库安全&#xff0c;及合理有效的利用水资源&#xff0c;是水利建设者需要探讨的主要内容。科学技…

【Python字符串攻略】:玩转文字,编织程序的叙事艺术

文章目录 &#x1f680;一.字符串基础&#x1f308;二.查看数据类型⭐三.转化❤️四.字符串索引&#x1f6b2;五.字符串切片&#x1f3ac;六.字符串切片-步长☔七.反向切片注意事项&#x1f6b2;八.字符串&#x1f4a5;查&#x1f4a5;改&#x1f4a5;删 ❤️九.字符串拼接&…

强化用户登录接口:解决登录接口被攻击导致掉线卡顿!

一、引言 用户登录接口是任何Web应用的核心部分&#xff0c;它负责身份验证和授权流程。然而&#xff0c;这些接口也常常成为黑客攻击的目标&#xff0c;尤其是当涉及到动态请求处理时。动态请求通常指的是根据用户输入生成的请求&#xff0c;这为诸如SQL注入、XSS攻击和CSRF攻…

Ansys Mechanical|使用CABLE280和LINK180单元建立线缆模型

一. CABLE280和LINK180单元都可以用于此分析。它们都可以用来划分梁实体。下面是这两种单元的特性。 CABLE280单元 适用于仅分析单向拉伸场景&#xff0c;比如线缆 不包括剪切变形影响结果 每个节点有三个自由度&#xff1a;Ux,Uy,Uz 与属…

【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…

消息队列的 6 种经典使用场景和 Kafka 架构设计原理详细解析

今天来聊一聊 Kafka 消息队列的使用场景和核心架构实现原理&#xff0c;帮助你全面了解 Kafka 其内部工作原理和设计理念。。 Apache Kafka 是一个高吞吐量、分布式的流处理平台&#xff0c;广泛应用于实时数据管道和流处理应用中。 Kafka 以其高性能、低延迟、扩展性和可靠性…

Android14 WMS-窗口绘制之relayoutWindow流程(二)-Server端

本文接着如下文章往下讲 Android14 WMS-窗口绘制之relayoutWindow流程(一)-Client端-CSDN博客 然后就到了Server端WMS的核心实现方法relayoutWindow里 WindowManagerService.java - OpenGrok cross reference for /frameworks/base/services/core/java/com/android/server…

任务3.5 清洗网址中的垃圾字符

本实战任务聚焦于数据清洗在Java编程中的应用&#xff0c;特别是清洗网址中的垃圾字符。数据清洗是确保数据质量的重要环节&#xff0c;它帮助开发者去除数据中的异常、错误或无关字符&#xff0c;从而提高数据分析的准确性和有效性。 任务背景&#xff1a;理解数据清洗的重要性…

刷代码随想录有感(93):贪心算法——无重叠区间(区间重叠问题:求区间重叠次数)

题干: 代码&#xff1a; class Solution { public:static bool cmp(vector<int>& a, vector<int>& b){return a[0] < b[0];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end(), c…

vulnhub靶机实战_DC-2

下载 靶机下载链接汇总&#xff1a;https://download.vulnhub.com/使用搜索功能&#xff0c;搜索dc类型的靶机即可。本次实战使用的靶机是&#xff1a;DC-2下载链接&#xff1a;https://download.vulnhub.com/dc/DC-2.zip 启动 下载完成后&#xff0c;打开VMware软件&#xf…

SendGrid发送邮件时如何调用API接口群发?

SendGrid发送邮件模板如何定制&#xff1f;邮件发送限制有哪些&#xff1f; SendGrid发送邮件是一种方便快捷的方式&#xff0c;可以在应用程序或网站中轻松地发送大量邮件。通过调用SendGrid的API接口&#xff0c;您可以实现群发邮件&#xff0c;无论是通知用户、发送营销邮件…

HDFS文件块损坏处理方案

1、问题概述 flume采集文本文件存储到hdfs中hive的ods层目录,并在hive中通过msck repair table刷新元数据,加载文本文件。报错如下: 2、问题分析 文件块BP-531411289-172.31.57.12-1539657748238出现了未知异常,导致namenode不能获取该文件块的信息,该文件块是由flume采…

小程序开发平台——搭建全功能小程序商城功能 前后端分离 带完整的安装代码包以及搭建教程

系统概述 随着电子商务的蓬勃发展&#xff0c;越来越多的企业和商家希望拥有自己的线上商城&#xff0c;以拓展销售渠道和提升用户体验。然而&#xff0c;传统的商城开发方式往往成本高、周期长&#xff0c;且难以满足快速变化的市场需求。因此&#xff0c;我们致力于打造一款…

成立不到一年,EDA“黑马”再获亿元级融资,国产自主黄金期加速到来

本土EDA厂商派兹互连 再获亿元级融资 电巢获悉&#xff0c;成都派兹互连电子技术有限公司(以下简称“派兹互连”)于近日完成超亿元产业方追加投资&#xff0c;本轮融资将用于研发投入、产品迭代及技术创新等方面。 同时我们了解到&#xff0c;派兹互连已与多家领先EDA/CAE产品…

干货分享:有哪些好用的绩效管理工具?

绩效管理在诸多企业中占据着举足轻重的地位&#xff0c;但同时也是一个令人头痛的问题。特别是在年终的绩效考评环节&#xff0c;它往往变得流于形式&#xff0c;成了一项例行公事。尽管每个人都被要求参与这一流程&#xff0c;但很少有人真正关心考核结果是否公正合理&#xf…

模拟实现priority_queue

文章目录 priority_queue简介priority_queue的实现Myless和Mygreaterpushpop常规接口 全部代码测试代码 总结 priority_queue简介 priority_queue是优先级队列。 什么是优先级队列&#xff1f; 优先级队列&#xff08;Priority Queue&#xff09;是一种数据结构&#xff0c;用于…