Python算法100例-2.6 分糖果

完整源代码项目地址,关注博主私信'源代码'后可获取

  • 1.问题描述
  • 2.问题分析
  • 3.算法设计
  • 4.确定程序框架
  • 5.完整的程序
  • 6.运行结果

1.问题描述

10个小孩围成一圈分糖果,老师分给第1个小孩10块,第2个小孩2块,第3个小孩8块,第4个小孩22块,第5个小孩16块,第6个小孩4块,第7个小孩10块,第8个小孩6块,第9个小孩14块,第10个小孩20块。然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。问经过这样几次后大家手中的糖一样多?每人各有多少块糖?

2.问题分析

根据题意,10个小孩开始时所拥有的糖果数是不同的,但分糖的动作却是相同的,即“所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块”。因此,这是一个典型的可使用循环结构来解决的问题。

将老师开始给每个小孩分配的糖果数作为循环的初始条件,以“所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块”这个重复的动作作为循环体,循环的结束条件为所有小孩手中的糖块数一样多。在循环体中,还需要判断糖块数的奇偶性,奇偶性不同完成的操作也不相同,显然这需要使用一个选择结构来实现。

3.算法设计

在问题分析中,我们已经确定了该问题使用循环结构来解决。那么如何存放每个小孩初始时所拥有的糖果数呢?这里考虑使用数组来存放老师开始给每个小孩分配的糖果数,因为有10个小孩,故定义一个长度为10的整型数组即可。在循环过程中,糖果每经过一次重新分配,就打印输出一次,直到最后一次打印时,10个小孩所拥有的糖果数都相同,此时结束循环。

4.确定程序框架

(1)定义整型数组存放初始条件

# sweet[0]=10表示第一个小孩的糖果数为10,以此类推
sweet = [10, 2, 8, 22, 16, 4, 10, 6, 14, 20]

将老师开始给每个小孩分配的糖果数存放到sweet数组中。

(2)循环结构实现框架

while (10个孩子手中的糖果数不相同):                         # 若不满足要求则继续循环
# 将每个孩子手中的糖果数平分为两份for i in range(0, 10):if sweet[i] % 2 == 0:                               # 若为偶数则直接分出一半sweet[i] = sweet[i] // 2t[i] = sweet[i]else:                                                               # 若为奇数则加1后再分出一半sweet[i] = (sweet[i] + 1) // 2t[i] = sweet[i]# 将分出的一半糖果给右边的孩子for n in range(0, 9):sweet[n + 1] = sweet[n + 1] + t[n]sweet[0] += t[9]j += 1printResult(sweet, j)                                   # 输出当前每个孩子手中的糖果数

上面的代码在while循环结构中又包含了两个for循环。

while循环的循环条件为“10个孩子手中的糖果数不相同”,第一个for循环用来将当前每个孩子手中的糖果分成一半,同时将分配结果保存在数组t中。在分配时注意区分奇偶数糖果分配方式的不同。第二个for循环用来将每个孩子手中已分好的一半的糖果给右边的孩子,由于第一个for循环中已经将每个孩子手中一半的糖果数保存在t数组中了,因此可直接利用t数组中的值修改sweet数组中的对应元素值。又由于“10个小孩围成一圈分糖果”,因此,sweet[9]右边的元素为sweet[0]。

(3)定义judge()函数

judge()函数用来判断每个孩子手中的糖果数是否相同。judge()函数的参数为整型数组,它可以判断该数组中各个元素的值是否相同,如果数组中所有元素的值都相同,则judge()函数返回值为0,否则judge()函数返回值为1。

judge()函数代码如下:

# 判断每个孩子手中的糖果数是否相同
def judge(candy):for i in range(0,10):if candy[0] != candy[i]:return 1                                # 不相同返回1return 0                                        # 相同返回0

程序流程图如图所示。

在这里插入图片描述

5.完整的程序

根据上面的分析,编写程序如下:

%%time
# 分糖果# 判断每个孩子手中的糖果数是否相同
def judge(candy):for i in range(0,10):if candy[0] != candy[i]:return 1     # 不相同返回1return 0   #相同返回0def giveSweets(sweet, j):t = [0] * 10while (judge(sweet)):  # 若不满足要求则继续循环# 将每个孩子手中的糖果数分成一半for i in range(0, 10):if sweet[i] % 2 == 0:  # 若为偶数则直接分出一半sweet[i] = sweet[i] // 2t[i] = sweet[i]else:  # 若为奇数则加1后再分出一半sweet[i] = (sweet[i] + 1) // 2t[i] = sweet[i]# 将分出的一半糖果给右边的孩子for n in range(0, 9):sweet[n + 1] = sweet[n + 1] + t[n]sweet[0] += t[9]j += 1printResult(sweet, j)# 输出列表中每个元素的值
def printResult(s, j):print("%4d" %j , end=" ")k = 0while k < 10:print("%4d" % s[k], end=" ")k += 1j += 1print()if __name__=="__main__":# 定义一个列表来存储老师给每个孩子分配的糖果数# sweet[0]=10表示第一个小孩的糖果数为10,以此类推sweet = [10, 2, 8, 22, 16, 4, 10, 6, 14, 20]print("child  1    2    3    4    5    6    7    8    9   10")print("..........................................................")print("次数   糖果数")# 输出每个孩子手中的糖果数j = 0print("%4d" % j, end=" ")for i in range(len(sweet)):print("%4d" % sweet[i], end=" ")print()giveSweets(sweet,j)  # 分糖果
child  1    2    3    4    5    6    7    8    9   10
..........................................................
次数   糖果数0   10    2    8   22   16    4   10    6   14   20 1   15    6    5   15   19   10    7    8   10   17 2   17   11    6   11   18   15    9    8    9   14 3   16   15    9    9   15   17   13    9    9   12 4   14   16   13   10   13   17   16   12   10   11 5   13   15   15   12   12   16   17   14   11   11 6   13   15   16   14   12   14   17   16   13   12 7   13   15   16   15   13   13   16   17   15   13 8   14   15   16   16   15   14   15   17   17   15 9   15   15   16   16   16   15   15   17   18   17 10   17   16   16   16   16   16   16   17   18   18 11   18   17   16   16   16   16   16   17   18   18 12   18   18   17   16   16   16   16   17   18   18 13   18   18   18   17   16   16   16   17   18   18 14   18   18   18   18   17   16   16   17   18   18 15   18   18   18   18   18   17   16   17   18   18 16   18   18   18   18   18   18   17   17   18   18 17   18   18   18   18   18   18   18   18   18   18 
CPU times: user 2.09 ms, sys: 1.6 ms, total: 3.69 ms
Wall time: 3.04 ms

6.运行结果

从输出结果可知,经过17次分糖过程后,10个孩子手中的糖果数相等,都为18块。

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

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

相关文章

基于Java SSM框架实现家庭食谱管理系统项目【项目源码+论文说明】

基于java的SSM框架实现家庭食谱管理系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个家庭食谱管理系统 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论…

拼团小程序制作的步骤是什么_轻松引领社交电商新风潮

打造爆款拼团小程序&#xff1a;轻松引领社交电商新风潮 在数字化浪潮席卷全球的今天&#xff0c;小程序以其轻便、快捷、易于传播的特性&#xff0c;成为了连接用户与商家之间最直接的桥梁。而拼团小程序&#xff0c;作为社交电商的佼佼者&#xff0c;更是以其独特的魅力&…

yolov8学习笔记(一)网络结构

一、yolov8.yaml YOLOv8详解 【网络结构代码实操】&#xff1a; YOLOv8详解 【网络结构代码实操】-CSDN博客文章浏览阅读10w次&#xff0c;点赞559次&#xff0c;收藏2.9k次。YOLOv8 算法的核心特性和改动可以归结为如下&#xff1a;提供了一个全新的 SOTA 模型&#xff0c;包…

新手如何在视频号中提取视频,看完这2个步骤你就懂了!

视频号已经成为许多用户分享生活、表达自我、获取信息的重要平台。 对于新手来说&#xff0c;理解并掌握如何在视频号中提取视频内容是至关重要的一步&#xff0c;很多人由于不知道平台的规则&#xff0c;导致视频号中不知怎么保存和提取。 本文将详细解析这一过程&#xff0…

TF-IDF,textRank,LSI_LDA 关键词提取

目录 任务 代码 keywordExtract.py TF_IDF.py LSI_LDA.py 结果 任务 用这三种方法提取关键词&#xff0c;代码目录如下&#xff0c; keywordExtract.py 为运行主程序 corpus.txt 为现有数据文档 其他文件&#xff0c;停用词&#xff0c;方法文件 corpus.txt 可以自己…

【IDEA】java 项目启动偶现Kotlin 版本问题 error:Kotlin:module was

一、问题描述&#xff1a; error:Kotlin:module was compiled with an incompatible version of kotlin the binary version of its metadata is二、问题原因&#xff1a; jar包版本冲突 三、解决方式&#xff1a; 1、Rebuild Project&#xff08;推荐☆&#xff09; 重新构…

【Vue3】学习watch监视:深入了解Vue3响应式系统的核心功能(下)

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

openGauss学习笔记-228 openGauss性能调优-系统调优-LLVM使用建议

文章目录 openGauss学习笔记-228 openGauss性能调优-系统调优-LLVM使用建议 openGauss学习笔记-228 openGauss性能调优-系统调优-LLVM使用建议 目前LLVM在数据库内核侧已默认打开&#xff0c;用户可结合上述的分析进行配置&#xff0c;总体建议如下&#xff1a; 设置合理的wor…

【论文精读】OS-Copilot: Towards Generalist Computer Agents with Self-Improvement

OS-Copilot: Towards Generalist Computer Agents with Self-Improvement 前言ABSTRACT1 INTRODUCTION2 THE OS-COPILOT FRAMEWORK2.1 PLANNER2.2 CONFIGURATOR2.2.1 DECLARATIVE MEMORY2.2.2 PROCEDURAL MEMORY2.2.3 WORKING MEMORY 2.3 ACTOR 3 THE FRIDAY AGENT3.1 A RUNNIN…

深入探索 JS 的提升机制、函数与块作用域以及函数表达式和声明(上)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

《高考》期刊杂志投稿邮箱知网教育类期刊发表

《高考》杂志是由国家新闻出版总署批准的正规教育类期刊。主要宣传高中新课程改革的专业性&#xff0c;是教育管理工作者、高中一线教师交流经验、探讨问题的重要平台&#xff0c;期刊突出政策性、针对性、指导性&#xff0c;是一本以教育科研成果展示为主&#xff0c;兼具教育…

Sora 提示词每日分享 | 中英文对照

每日分享一个 sora 创意视频提示词之《冲浪者在历史大厅的巨浪中展现技艺》 sora提示词视频 prompt: In an ornate, historical hall, a massive tidal wave peaks and begins to crash. Two surfers, seizing the moment, skillfully navigate the face of the wave. 提示词…