首页 > 编程语言 >python算法:分糖果

python算法:分糖果

时间:2024-05-16 10:32:47浏览次数:20  
标签:10 15 17 16 python 18 算法 sweet 糖果

一,while循环:

1,功能:重复执行同一段代码
语法:

while 条件表达式:
    # 循环体

 当条件表达式的返回值为真时,则执行循环体中的语句,
执行完毕后,重新判断条件表达式的返回值,
如果表达式返回的结果为假,则退出循环体

2,流程图:

3,打印从1到10

1 2 3 4 5 # 打印从1到10 n = 1 while n <= 10:     print(n, end=" ")     n += 1

运行结果:

1 2 3 4 5 6 7 8 9 10 

说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/03/22/python-suan-fa-fen-tang-guo/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: [email protected]

二,分糖果的题目与解析

1,题目:

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

2,解析:

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

将老师开始给每个小孩分配的糖果数作为循环的初始条件,
以“所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块”这个重复的动作作为循环体,
循环的结束条件为所有小孩手中的糖块数一样多。

三,编写代码

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 # 函数:判断列表中各成员是否相等 # candy:保存糖果数量的列表 def judge(candy):     for i in range(0, 10):         if candy[0] != candy[i]:             return 1  # 不相同返回1     return 0  # 相同返回0     # 输出列表中每个元素的值 # s: 要打印的列表 # j: 需要打印的次数计数器 def print_result(s, j):     print("%4d" % j, end=" ")     for k in range(10):    # 打印列表         print("%4d" % s[k], end=" ")     print()     # 换行   # 分糖的函数 # sweet: 保存糖果数量的列表 # j: 计数器,记录分糖的次数 def giveSweets(sweet, j):     t = [0] * 10      # 临时表,保存每次分出去的一半糖     while (judge(sweet)):  # 若不满足要求则继续循环         # 将每个孩子手中的糖果数平分为两份,放到t列表中         for i in range(0, 10):             if sweet[i] % 2 == 0# 若为偶数则直接分出一半                 sweet[i] = sweet[i] // 2                 t[i] = sweet[i]             else# 若为奇数则加1后再分出一半                 sweet[i] = (sweet[i] + 1) // 2                 t[i] = sweet[i]           # 将分出的一半糖果t[n] 给右边的孩子 sweet[n + 1]         for n in range(0, 9):             sweet[n + 1] = sweet[n + 1] + t[n]         sweet[0] += t[9]     # 第10个分出去的一个t[9],给第一个孩子:sweet[0]         j += 1      # 计数器加1         print_result(sweet, j)    # 打印本次分糖后的结果     # 定义列表sweet,存储老师给每个孩子分配的糖果数 # sweet[0]=10表示第一个小孩的糖果数为10,以此类推 sweet = [10, 2, 8, 22, 16, 4, 10, 6, 14, 20] print("次数 各人糖果数") j = 0      # 计数器,保存分糖的次数 # 输出每个孩子手中的糖果数 print("%4d" % j, end=" ") for i in range(len(sweet)):     print("%4d" % sweet[i], end=" ") print() # 开始分糖 giveSweets(sweet, j)  # 调用分糖果函数

运行结果:

次数 各人糖果数
   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 
 阅读: 61

标签:10,15,17,16,python,18,算法,sweet,糖果
From: https://www.cnblogs.com/architectforest/p/18195448

相关文章

  • python算法:平分7筐鱼
    一,for循环:1,功能:重复执行同一段代码语法:forindexinrange(n):   #循环体代码index:用来依次接收可迭代对象中的元素的变量名range()函数:负责返回整数序列流程图:2,应用range可以同时指定start和stop,用for遍历并打印1234#指定start和s......
  • 接口自动化测试框架【python+requests+pytest+excel+allure+jenkins】
    一.在整个框架中需要用到哪些东西?1.python环境安装https://www.python.org/downloads/windows/下载解压后直接安装,选择Addpythontopath2.JAVA环境配置安装包下载地址:https://www.oracle.com/java/technologies/downloads/环境变量设置参数如下:●变量名:JAVA_HOME●变......
  • python算法: 抓交通肇事犯
    一,for循环:1,功能:重复执行同一段代码语法:forindexinrange(n):   #循环体代码index:用来依次接收可迭代对象中的元素的变量名range()函数:负责返回整数序列流程图:2,应用range可以同时指定start和stop,用for遍历并打印1234#指定start和s......
  • 评估统计算法在银行伪造钞票检测中的价值
    数据科学项目 “评估统计算法在银行伪造钞票检测中的价值” by吴同学 目的 这个数据科学项目的目的是提出一种可靠的算法,以便通过光学扫描仪或类似工具,银行可以区分“真钞”和“伪造”钞票。一般来说,光学扫描仪会检测每张钞票的某些特征,并将它们发送到一个算法,......
  • 推荐一款微信公众平台Python开发神器!
    1、引言在当今数字化时代,微信公众平台成为了企业和个人连接用户的重要渠道。为了高效地管理和与用户互动,开发者需要一个强大而灵活的工具。Weixin-Python正是这样一个为微信公众平台量身打造的Python库,它以其简洁的API和丰富的功能赢得了众多开发者的青睐。本文将深入探讨......
  • python函数参数中的**kwargs
    表示传递任意参数,必须放在形参的最后本质就是一个字典在函数内部可以继续进行处理,添加参数,例如:defexample_function(**kwargs):kwargs['db']=1print(kwargs)如果函数b中的形参是指定了名字的参数,并且你将字典以**a的方式传递给该函数,那么字典中的键必须与函......
  • python多进程中嵌入多进程注意事项
    例如代码:frommultiprocessingimportPoolp1=Pool(4)s=[1,2,3,4]foriins:p1.apply_asny(某方法,args=(i))p1.close()p1.join()此时,某方法中也有一个多进程设置,这样的话就是双重多进程,只要是传入的参数之间是没有关系的,那么就没有问题。如果此时,最外层的apply_......
  • 从C#通过代码启动Python脚本没有接收到参数
    本来写的是这样:ProcessStartInfopsi=newProcessStartInfo{FileName="cmd.exe",WorkingDirectory=FrmNewProject.GetFolderPath()+"\\SolverForEXE",RedirectStanda......
  • ModbusRTU从站扫描工具 python实现
    扫描指定串口下,有哪些modbusRTU服务端[1-247]frompymodbus.clientimportModbusSerialClientasModbusClientfrompymodbus.exceptionsimportModbusIOException,ConnectionException,NoSuchSlaveExceptionimporttimedefread_holding_registers(client,slave_addres......
  • ModbusTCP从站(服务端)扫描工具 python实现
    扫描指定IP网络下,有哪些modbusTCP服务端[1-247]frompymodbus.clientimportModbusTcpClientfrompymodbus.exceptionsimportModbusIOException,ConnectionException,NoSuchSlaveExceptionimporttimedefread_holding_registers(client,slave_address):""&quo......