我正在研究一种数学函数,我必须检查哪两个列表更大,不能再被超越。
我已经在这方面工作了很长一段时间,但我无法做到这一点,而且代码变得越来越复杂。我认为有一些公式可以让我的生活更轻松,但我找不到它,我担心数学不是我的强项。
这是我正在尝试做的事情:
我有两个列表,每隔一步添加0或1的值。因此,步骤1将0或1添加到List1,步骤2将0或1添加到列表2。
在6个步骤之后,该函数必须停止并检查列表1是否在列表2中有更多的内容,反之亦然。它也可能是平等的。
但是当你在第4步并且List 1里面有两个,而List 2里面有两个零时,那么该函数应该停止并显示List1,因为List 2永远不会超过或均衡List 1。
另一个例子: 如果你在步骤5中,List1有1个1和2个零,而List2有2个,那么函数应该停止,因为它不再重要,因为List2比List1多了。
但我似乎无法解决这个难题。有没有人可以解决这个问题?
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");
}
}
}
答案 0 :(得分:2)
由于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");
}
}
}
所以,如果将来有人也在寻找这个,那就是。