Tideman中的投票功能(CS50的pset 3)

时间:2020-08-23 17:45:04

标签: c function cs50 vote

我正在尝试处理投票功能,有两个问题想寻求您的帮助:

  1. 在表决功能定义中,我们具有:
bool vote(int rank, string name, int ranks[])

我不明白rank参数的用途,为什么在这里声明它?

  1. 我对表决功能的解决方案如下:
// Update ranks given a new vote
bool vote(int rank, string name, int ranks[])
{
    for (int j = 0; j < candidate_count; j++)
    {
        for (int k = 0; k < candidate_count; k++)
        {
            //Compare the name provided by the user with the name of the candidates numbered jth in the array candidates[MAX] which already populated above
            if (strcmp(name, candidates[k]) == 0)
            {
                ranks[j] = k;
                printf("ranks[%d] = %d\n", j, k);
                }
        }
        return true;
    }
    return false;
}

printf函数的结果如下(候选者= {a,b,c},voter_count = 2):

等级1:a, ranks [0] = 0; 等级2:b, 等级[0] = 1; 等级3:c, ranks [0] = 2; 等级1:c, ranks [0] = 2; 等级2:b, 等级[0] = 1; 等级3: 排名[0] = 0

等级[j]中j的值未更新。我该如何解决这个问题?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这是一些代码:

// Update ranks given a new vote    
bool vote(int rank, string name, int ranks[]){                      
    
    //We want to cycle through the list of candidates given
    for(int i = 0; i < candidate_count; i++){

        //If the candidate(s) in the array matches with string name, we will continue
        if(strcmp(candidates[i], name) == 0){

            //This is the tricky part to understand. Read below for answer.
            ranks[rank] = i;
            return true;
        }
    }
    
    return false;
}

int rank代表用户给定的候选人排名,int i代表候选人在candidates[]中的位置。我们要根据正确的排名更新ranks[]。仍然很难理解,因此这里是一个示例。


我们有四个候选人:约翰,吉姆,山姆,亚历克斯

string candidates[MAX];中,John在candidates[0],Jim在candidates[1],Sam在candidates[2],而Alex在candidates[3]

假设用户投票,并且投票顺序如下:

  1. 亚历克斯
  2. 约翰
  3. 吉姆
  4. 山姆

让我们在bool vote(int rank, string name, int ranks[])中运行它。

  1. vote(j, name, ranks),其中 j = 0 名称= Alex ranks是排名[]
  2. 我们将循环使用Alex名称,直到在candidates[MAX]中找到它为止。
  3. 亚历克斯在candidates[i]中找到,其中i = 3。
  4. 我们要更新ranks[]
  5. ranks[rank] = i;表示ranks[rank]处的i等于3。换句话说,ranks [0]等于Alex在candidates[MAX]中的第i个位置。

然后重复此循环,直到完成所有选民的排名为止。