用于选择正确人的程序逻辑

时间:2016-06-07 15:31:34

标签: c# algorithm math logic

我在选择使用算法解决此问题的正确方法时遇到问题。我很欣赏有关这个问题的任何想法。这不是作业,这是我写的个人使用的应用程序。这不是确切的问题,但它是我试图找到最佳解决方法的逻辑的一个例子。

实施例: 假设你有三个人。这三个人都可以割草,修剪灌木和杂草。一个任务可以由一个人执行。根据他们执行任务的能力,人们的评分为1-10分,更好。人1可以割草= 8,修剪= 4,杂草= 6.人2可以割草= 5,修剪4,杂草7.人3可以割草= 7,修剪8,杂草= 8.我如何找到要做的人每个任务使用循环语句?我将使用能力之和作为度量来选择。如果1人刈,2人和2人,请记住。 3必须修剪或杂草。只有一个人可以执行任务。

我考虑过创建一个二维数组。像数组[人,能力]和循环通过它,但我有问题理解循环逻辑应该如何工作。任何帮助或正确方向的点将不胜感激!

谢谢

2 个答案:

答案 0 :(得分:0)

如果检查了所有人的排列,就可以解决问题。

如果您对数组3(人数)进行排列,您将得到类似的结果(取决于您的符号):

ABC ACB BAC BCA 出租车 CBA

例如A表示人1,B表示人2,C表示人3.因此ABC表示人1做工作1,人2表示工作2,人3表示工作3.为了更好地理解BCA表示人2做工作1,人3做工作2,人1做工作3。

因此,当您进行每个排列时,您可以使用订单和数据表计算所需的成本。

要在C#中进行排列,您可以使用: Listing permutations

答案 1 :(得分:0)

我认为它就像一类包含其作为属性的人。考虑到这一点,您可能会有一个人员列表,您可以通过迭代来找到一些工作中最好的人,如下所示:

    maxMow=0; 
    maxMowIndex=0;
    for(i=0;i<persons[i].Count;i++)
    {
        if(maxMow<persons[i].MowAbbility)
        {
           maxMow=persons[i].MowAbbility;
           maxMowIndex=i;
        }
    }

这是你如何确定具有最佳割草能力的人的指数,你可以做同样的事情来找出每种能力最好的人。当一个人在两件或两件以上的事情中表现最好时会出现问题,那么考虑到他人的能力,你应该选择你应该分配给他的工作,但在大多数情况下这会有效。 一个人看起来问题,应该定义如下:

class Person
{
   public int Mow;
   public int Trim;
   public int Weed;
}