C# 确定电梯总停车次数的程序
有人问我一个问题,要我写一个优化程序,确定一部电梯为X个乘客服务的总停靠次数。问题描述如下 在M层楼的建筑中有一部电梯,这部电梯一次最多可搭载X人,或者最多可搭载总重量Y。考虑到一组人员已经到达,他们的体重以及他们需要停下来的楼层,考虑到电梯为所有人员服务的停站次数。考虑电梯在先到先服务的基础上。< /P> 例如,让数组A作为要考虑的人员的权重 A[]={60,80,40} 让数组B分别为人员需要被放下的楼层 B[]={2,3,5} 建筑总层数为5层,电梯一次最多可容纳2人,最大载客量为200人 在本例中,电梯总共需要5个停靠站,分别为地面、2、3、地面、5、地面 这方面的最佳代码是什么 我的解决方案之一如下。还有其他更好的解决方案吗C# 确定电梯总停车次数的程序,c#,algorithm,C#,Algorithm,有人问我一个问题,要我写一个优化程序,确定一部电梯为X个乘客服务的总停靠次数。问题描述如下 在M层楼的建筑中有一部电梯,这部电梯一次最多可搭载X人,或者最多可搭载总重量Y。考虑到一组人员已经到达,他们的体重以及他们需要停下来的楼层,考虑到电梯为所有人员服务的停站次数。考虑电梯在先到先服务的基础上。< /P> 例如,让数组A作为要考虑的人员的权重 A[]={60,80,40} 让数组B分别为人员需要被放下的楼层 B[]={2,3,5} 建筑总层数为5层,电梯一次最多可容纳2人,最大载客量为200人
class Solution
{
/// <summary>
/// Return total stops used
/// </summary>
/// <param name="A">weight of people</param>
/// <param name="B">floors they need to get down</param>
/// <param name="M">total floors in the building</param>
/// <param name="X">Max people to carry at a time</param>
/// <param name="Y">max weight to carry at a time</param>
/// <returns></returns>
public int solution(int[] A, int[] B, int M, int X, int Y)
{
// write your code in C# 6.0 with .NET 4.5 (Mono)
int totalStops = 0;
long totalWeightPerRound = 0;
int maxPersonsCount = 0;
List<int> lstFloors = new List<int>();
int currPerson = 0;
bool startLift = false;
while (currPerson < A.Length)
{
if ((totalWeightPerRound + A[currPerson]) <= Y && (maxPersonsCount+1) <= X)
{
totalWeightPerRound += A[currPerson];
maxPersonsCount++;
lstFloors.Add(B[currPerson]);
if (currPerson == A.Length - 1)
startLift = true;
currPerson++;
}
else
{
startLift = true;
}
if (startLift)
{
totalStops += lstFloors.Distinct().Count() + 1;
lstFloors.Clear();
maxPersonsCount = 0;
totalWeightPerRound = 0;
startLift = false;
}
}
return totalStops;
}
}
类解决方案
{
///
///返回使用的总站点数
///
///人的重量
///他们需要下来
///建筑物的总楼层数
///一次最多可携带人数
///一次可携带的最大重量
///
公共整数解决方案(整数[]A,整数[]B,整数M,整数X,整数Y)
{
//用C#6.0和.NET4.5(Mono)编写代码
int totalStops=0;
长总权重perround=0;
int maxPersonsCount=0;
列表=新列表();
int currPerson=0;
bool-startift=false;
while(currenperson 如果((totalWeightPerRound+A[currPerson])可能有点离题,但正如上面有人所说,这是一个数学问题而不是编程问题。为了安全起见,你应该构造一个函数来描述你想要最小化的代价函数,添加约束以包含边界条件,最后计算变差以获得极值
换句话说,这是一项非常重要的数学任务,在编写一行代码之前,你应该真正把精力放在正确的数学上。优化意味着获得最佳解决方案,而不仅仅是某个解决方案;)问问你自己-什么是它的最佳数学\算法解决方案?你如何在纸上,用算法解决这个问题,而不使用编程语言?当你回答这个问题时,编写代码将是最简单的部分。我确实写了一个解决方案,我在问题中更新了它,但想检查是否还有更好的解决方法继续。这不是很好,还有很多小东西需要改进。但是,如果这段代码有效,那么StackOverflow就不是一个人们可以帮助你的地方。请参阅这篇文章:我投票结束这个问题,因为这是一个代码审查请求。谢谢,我将在其他网站上发布这是一个评论,不是answer、 请使用评论发表评论。如果您没有足够的声誉发表评论,请获得一些声誉,这样您就可以在不违反网站标准的情况下发表评论。