计算可能性的数学函数

本文关键字:函数 可能性 计算 | 更新日期: 2023-09-27 18:26:57

我正在研究一种数学函数,在这种函数中,我必须检查两个列表中哪一个更大,并且不能再被超越。

我已经做了很长一段时间了,但我真的做不好,代码对我来说越来越复杂。我想有某种公式可以让我的生活更轻松,但我找不到它,恐怕数学不是我的强项。

以下是我要做的:

我有两个列表,每隔一步添加一个值0或1。因此,步骤1将一个0或1添加到List1,步骤2将一个1或0添加到List2。

经过6个步骤后,该功能必须停止并检查列表1中的列表是否比列表2多,反之亦然。它也可能是相等的。

但是,例如,当您在第4步时,列表1中有两个1,列表2中有两个子0,那么函数应该停止并显示列表1,因为列表2再也不能超过或等于列表1了。

另一个例子:如果您在步骤5中,List1有1个1和2个0,List2有2个1,那么函数应该停止,因为它不再重要,因为List2比List1有更多的1。

但我似乎解决不了这个难题。有人能搞清楚吗?

private void button1_Click(object sender, EventArgs e)
{
    resetLists();
}
private void button2_Click(object sender, EventArgs e)
{
    nextStep();
}
public Random rnd = new Random();
public List<int> List1 = new List<int>();
public List<int> List2 = new List<int>();
public int step = 0;
private void resetLists()
{
    List1.Clear();
    List2.Clear();
    step = 0;
    Console.WriteLine("----------------------------");
}
private void nextStep()
{
    step++;
    if (step <= 6)
    {
        if (step % 2 != 0)
        {
            int result = rnd.Next(0, 2);
            List1.Add(result);
            Console.WriteLine("List 1: " + result.ToString());
        }
        else
        {
            int result = rnd.Next(0, 2);
            List2.Add(result);
            Console.WriteLine("List 2: " + result.ToString());
        }
        if (step > 3)
        {
            checkLists();
        }
    }
}
private void checkLists()
{
    int actualResultList1 = 0;
    int actualResultList2 = 0;
    int virtualResultList1 = 0;
    int virtualResultList2 = 0;
    // GET THE ONES FROM LIST 1
    for (int l1 = 0; l1 < List1.Count; l1++)
    {
        if (List1[l1] == 1)
        {
            actualResultList1++;
        }
    }
    // GET THE ONES FROM LIST 2
    for (int l2 = 0; l2 < List2.Count; l2++)
    {
        if (List2[l2] == 1)
        {
            actualResultList2++;
        }
    }
    // CALCULUATE THE VIRTUAL ONES
    virtualResultList1 = 3 - List1.Count;
    virtualResultList2 = 3 - List2.Count;
    if (step < 6)
    {
        if ((actualResultList1 + virtualResultList1) >= (actualResultList2 + virtualResultList2) + (6-step))
        {
            MessageBox.Show("List1");
        }
        if ((actualResultList2 + virtualResultList2) >= (actualResultList1 + virtualResultList1) + (6-step))
        {
            MessageBox.Show("List2");
        }
    }
    else
    {
        if (actualResultList1 > actualResultList2)
        {
            MessageBox.Show("List1");
        }
        else if (actualResultList2 > actualResultList1)
        {
            MessageBox.Show("List2");
        }
        else if (actualResultList1 == actualResultList2)
        {
            MessageBox.Show("equal");
        }
    }
}

计算可能性的数学函数

多亏了Rob的大力帮助,我才得以解决这个问题。

最终解决方案:

private void checkLists()
{
int actualResultList1 = 0;
int actualResultList2 = 0;
// GET THE ONES FROM LIST 1
for (int l1 = 0; l1 < List1.Count; l1++)
{
    if (List1[l1] == 1)
    {
        actualResultList1++;
    }
}
// GET THE ONES FROM LIST 2
for (int l2 = 0; l2 < List2.Count; l2++)
{
    if (List2[l2] == 1)
    {
        actualResultList2++;
    }
}
if ((List1.Count + List2.Count) < 6)
{
    if (actualResultList1 > (actualResultList2 + ((6/2) - List2.Count)))
    {
        MessageBox.Show("List1");
    }
    if (actualResultList2 > (actualResultList1 + ((6/2) - List1.Count)))
    {
        MessageBox.Show("List2");
    }
}
else
{
    if (actualResultList1 > actualResultList2)
    {
        MessageBox.Show("List1");
    }
    else if (actualResultList2 > actualResultList1)
    {
        MessageBox.Show("List2");
    }
    else if (actualResultList1 == actualResultList2)
    {
        MessageBox.Show("equal");
    }
}
}

因此,如果将来有人也在寻找这个,它就在这里。