编程 题目描述: 有N队学生,编号分别为1,2,3,…,n。每队上有若干学生,但学生总数必为n的倍数。可以在任一队上移动若干个学生。 移动的规则是:在编号为1的队上移动学生,只能移到编号为2的队上;在编号为n的队上移动的学生,只能移动到编号为n-1 的队上;其他队上移动的学生,可以移到相邻左边或右边的队上。现在要求找出一种移动方法,用最少的移动次数使每队上的 学生人数一样多。例如:n=3,3队学生分别为:3,4,2则移动一次可以达到目的:从第2队中移动一名学生到第3对中即可 实现每队人数相同。 输入: 要求从标准输入中获得两类数据,值的范围正整数(1~100之间),表示队数和每队人数;第一行输入队数,第二行输入每队 人数,每行多个数值之间空格隔开。 输出: 程序输出需要移动的次数
时间: 2023-05-26 18:03:19 浏览: 176
2009年绍兴市第七届少儿信息学竞赛复赛题目的答案
思路:
首先需要算出每队学生人数的平均数,记为avg。然后,对于每队学生人数与平均数的差值,可以计算得出:
- 对于第一队和最后一队,差值只能通过向相邻队伍移动实现,因此只需要考虑相邻两队中的最大值与最小值之间的差值即可。
- 对于中间的队伍,差值可以通过向相邻队伍移动实现,因此只需要考虑相邻两队中较大的差值即可。
最后将这些差值加起来,即为总的移动次数。
代码:
阅读全文