导航2D数组以进行潮汐投票(COMPLEX)

问题描述 投票:0回答:1

我有一项任务,预计我将在2D数组中填充其他对手的排名。如果您熟悉潮人投票方法,那么这对您来说很有意义:到目前为止,这就是我所拥有的。它部分起作用。不幸的是,当票数变化时,结果也会变化。

for (int i = 0; i < x; i++)
    {
        for (int j = 0; j < x ; j++)
        {
            rN = i + k;
            if (i != j)
            {
                if (r[i] > rN);
            x = r[i];
            y = r[j];
            p = 1;
            pt[x][y] = pt[x][y] + p;
            }
        }
    }

r[i]代表种族中的人。假设数组只有3个人。

如果:r[i]代表投票卡上的候选人位置。在这种情况下,有3个职位。我不允许将r的值更改为字符串,也不能添加结构。我必须用数字代表候选人。可以说,安德鲁(Andrew)被选为第一,布莱恩(Brian)被选为第二,查理(Charlie)被选为第三。然后在r中:Andrew = 0Brian = 1Charlie = 2

因此,安德鲁(Andrew)胜过布莱恩(Brean)1次,比查理(Charlie)1次,而布莱恩(Brean)胜过查理(Charlie)1次。

所以我需要像这样填充我的2D数组pt[ ][ ]

  A B C
A 0 1 1
B 1 0 0

当它们优先于列时,它们相交,则得到1。如果安德鲁排在第一,布莱恩排在第二,查理排在第三,那就很好。但是,当这些订单改变时,我在候选人未赢得一对的列中得到1。

我希望有人能理解。这是一项复杂的工作,因为这是我第一次浏览这样的2d数组。

multidimensional-array
1个回答
0
投票

经过数小时的辛劳,我发现了这一点。因此,对于试图绕过“记录偏好设置”部分的学生来说,这似乎是实现此目标的唯一方法:

    for (int i = 0, p = 0, t = 0; i < xt; i++)
    {   
        if (i == xt - t)
        {
        break;
        }
        for (int j = 0 + t, r, l = 1; j < xt ; j++)
        {
            x = r[i];
            y = r[j];
            if (i != j)
            {
                p = 1;
                r = pt[x][y];
                pt[x][y] = r + p;
            }
         }
         t++;
    }

事实证明,当我们在第一个if循环之后实现一个小的for语句时,我们可以更改该for循环的最大迭代次数:

    for (int i = 0, p = 0, t = 0; i < x; i++)
    {   
        if (i == x - t)
        {
        break;
        }

这将每次迭代缩短for循环的时间1次。

我们还需要缩短j j循环的每次迭代的for起点。您可以在此处看到,以j = 0 + t表示。您必须计算出该选票上哪位候选人先获胜,然后哪位候选人获胜。然后谁赢了第二,赢了第三,依此类推。在下面的每个数字是候选人的等级:

0 beats 1
0 beats 2
0 beats 3
0 beats 4
1 beats 2
1 beats 3
2 beats 4
2 beats 3
2 beats 4
3 beats 4

第一列(i的迭代用于更改xpt[x][y]中的位置的列中的数字,每i的迭代减少1。

[第二列中的数字,由y中的pt[x][y]表示,从上一迭代开始+ 1。

这非常令人困惑,这可能是哈佛为什么将其用作作业的原因。

© www.soinside.com 2019 - 2024. All rights reserved.