// 电梯停在哪一层楼,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少?
public class Test_005
{
// person[i]表示要到第i层的人数,person[0],person[1]默认为空,即没有人到0,1层
static int[] person =
{
0, 0, 5, 7, 8, 9, 6, 6, 1, 4, 4, 8, 5, 2, 4, 5, 8, 6, 3, 3, 5, 9, 9, 6, 6, 9, 8, 8, 5, 5, 9, 6, 6, 3
};
static int stopFloor = 0;// 电梯停的层数
static int sumFloor = 0;// 乘客爬楼层总和
static int N = person.length - 1;// 总楼层数
static int N1 = 0;// 去电梯停留层之下的人数
static int N2 = 0;// 去电梯停留层的人数
static int N3 = 0;// 去电梯停留层之上的人数
/**
* 计算目标楼层
* @param person //记录要到每层的人数
*/
public static void targetFloor(int[] person)
{
// 没有到1层以上的就不用坐电梯了
if (null == person || person.length <= 2)
{
return;
}
// 当电梯停留在第二层的时候
stopFloor = 2;
N1 = 0;
N2 = person[stopFloor];
for (int i = 3; i <= N; i++)
{
N3 += person[i];
sumFloor += person[i] * (i - stopFloor);
}
// 当电梯停留在3层以上的时候
for (int i = 3; i <= N; i++)
{
if (N1 + N2 < N3)
{
stopFloor = i;
N1 = N1 + N2;
N2 = person[i];
N3 = N3 - person[i];
sumFloor += N1 + N2 - N3;
}
}
}
public static void main(String[] args)
{
targetFloor(person);
System.out.println("停留在:" + stopFloor + " 乘客爬楼层总和:" + sumFloor);
}
}
编程之美_006小飞的电梯调度算法
最新推荐文章于 2019-07-31 16:02:00 发布