A25732. 编程实现:有N个小朋友从左到右排成一排,每个小朋友手中都有一定数量的糖果,且糖果总数量是N的倍数。计算出最少调整几次可以使每个小朋友的糖果数量相同。调整规则如下:规则1:每个小朋友的糖果只能调整到左右相邻的两个小朋友手中;规则2:第一个小朋友的糖果只能调整到第二个小朋友手中;规则3:最后一个小朋友的糖果,只能调整到倒数第二个小朋友手中。 例如:1~3号个小朋友原有糖果数量分别为6,4,2。1)1…
填空题
中等
知识点
题目描述
编程实现:
有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参考答案
#参考答案1
n=input()
n=n.strip()
n=n.split(",")
for i in range(len(n)):
n[i]=int(n[i])
r=sum(n)//len(n)
times=0
while True:
for item,value in enumerate(n):
if value>r:
if item<len(n)-1:
v=value-r
n[item]-=v
n[item+1]+=v
times+=1
break
elif item==len(n)-1:
v=value-r
n[item]-=v
n[item-1]+=v
times+=1
break
if value<r:
if item<len(n)-1:
v=r-value
n[item+1]-=v
n[item]+=v
times+=1
break
if item==len(n)-1:
v=r-value
n[item-1]-=v
n[item]+=v
times+=1
break
ok=True
for i in n:
if i!=r:
ok=False
if ok:
break
print(times)
#参考答案2
ls = list(map(int,input().split(",")))
cnt = 0
ave = sum(ls)//len(ls)
for i in range (len(ls)):
if ls[i] == ave :
continue
else:
ls[i+1]+=ls[i]-ave
cnt += 1
print(cnt)答案解析
评分标准:
7分:能正确输出一组数据;
7分:能正确输出两组数据;
8分:能正确输出三组数据;
8分:能正确输出四组数据。
上一题
下一题