10个小孩围成一圈分糖果,老师分给第1个小孩10块,第2个小孩2块,第3个小孩8块,第4个小孩22块,第5个小孩16块,第6个小孩4块,第7个小孩10块,第8个小孩6块,第9个小孩14块,第10个小孩20块。
然后所有的小孩同时将手中的糖分一半给右边的小孩;糖块数为奇数的人可向老师要一块。
问经过这样几次后大家手中的糖一样多?每人各有多少块糖?
下面直接上代码:
########################
# 判断每个孩子手中的糖果数是否相同
def judge(candy):
for i in range(0,10):
if candy[0] != candy[i]:
return 1 # 不相同返回1
return 0 #相同返回0
def givetangguos(tangguo, j):
t = [0] * 10
while (judge(tangguo)): # 若不满足要求则继续循环
# 将每个孩子手中的糖果数平分为两份
for i in range(0, 10):
if tangguo[i] % 2 == 0: # 若为偶数则直接分出一半
tangguo[i] = tangguo[i] // 2
t[i] = tangguo[i]
else: # 若为奇数则加1后再分出一半
tangguo[i] = (tangguo[i] + 1) // 2
t[i] = tangguo[i]
# 将分出的一半糖果给右边的孩子
for n in range(0, 9):
tangguo[n + 1] = tangguo[n + 1] + t[n]
tangguo[0] += t[9]
j += 1
printResult(tangguo, j)
# 输出列表中每个元素的值
def printResult(s, j):
print("%4d" %j , end=" ")
k = 0
while k < 10:
print("%4d" % s[k], end=" ")
k += 1
j += 1
print()
if __name__=="__main__":
# 定义一个列表来存储老师给每个孩子分配的糖果数
# tangguo[0]=10表示第一个小孩的糖果数为10,以此类推
tangguo = [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 = 0
print("%4d" % j, end=" ")
for i in range(len(tangguo)):
print("%4d" % tangguo[i], end=" ")
print()
givetangguos(tangguo,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
到第17次的时候大家手上的糖果就一样了。
________________END______________
网友评论