C# 确定电梯总停车次数的程序

C# 确定电梯总停车次数的程序,c#,algorithm,C#,Algorithm,有人问我一个问题,要我写一个优化程序,确定一部电梯为X个乘客服务的总停靠次数。问题描述如下 在M层楼的建筑中有一部电梯,这部电梯一次最多可搭载X人,或者最多可搭载总重量Y。考虑到一组人员已经到达,他们的体重以及他们需要停下来的楼层,考虑到电梯为所有人员服务的停站次数。考虑电梯在先到先服务的基础上。< /P> 例如,让数组A作为要考虑的人员的权重 A[]={60,80,40} 让数组B分别为人员需要被放下的楼层 B[]={2,3,5} 建筑总层数为5层,电梯一次最多可容纳2人,最大载客量为200人

有人问我一个问题,要我写一个优化程序,确定一部电梯为X个乘客服务的总停靠次数。问题描述如下

在M层楼的建筑中有一部电梯,这部电梯一次最多可搭载X人,或者最多可搭载总重量Y。考虑到一组人员已经到达,他们的体重以及他们需要停下来的楼层,考虑到电梯为所有人员服务的停站次数。考虑电梯在先到先服务的基础上。< /P> 例如,让数组A作为要考虑的人员的权重 A[]={60,80,40}

让数组B分别为人员需要被放下的楼层 B[]={2,3,5}

建筑总层数为5层,电梯一次最多可容纳2人,最大载客量为200人 在本例中,电梯总共需要5个停靠站,分别为地面、2、3、地面、5、地面

这方面的最佳代码是什么

我的解决方案之一如下。还有其他更好的解决方案吗

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、 请使用评论发表评论。如果您没有足够的声誉发表评论,请获得一些声誉,这样您就可以在不违反网站标准的情况下发表评论。