python算法:分糖果
一,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
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,分糖果的题目与解析
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