题目描述: 有N队学生,编号分别为1,2,3,…,n。每队上有若干学生,但学生总数必为n的倍数。可以在任一队上移动若干个学生。 移动的规则是:在编号为1的队上移动学生,只能移到编号为2的队上;在编号为n的队上移动的学生,只能移动到编号为n-1 的队上;其他队上移动的学生,可以移到相邻左边或右边的队上。现在要求找出一种移动方法,用最少的移动次数使每队上的 学生人数一样多。例如:n=3,3队学生分别为:3,4,2则移动一次可以达到目的:从第2队中移动一名学生到第3对中即可 实现每队人数相同。
时间: 2023-05-26 15:03:16 浏览: 122
算法思路:
首先求出每队学生的平均数,然后从第一队开始,如果当前队伍的人数大于平均数,则将多出来的学生向相邻的队伍移动。具体移动方法如下:
如果当前队伍是第一队,则将多出来的学生向第二队移动。
如果当前队伍是最后一队,则将多出来的学生向倒数第二队移动。
如果当前队伍是中间任意一队,则将多出来的学生向相邻的队伍中人数不足的那个队伍移动,如果两边队伍人数相等,则向左边移动。
重复以上移动过程,直到每队学生数都等于平均数为止。
算法实现:
C++ 代码
阅读全文