首页 > 解决方案 > CS50 Tideman“当一些配对并列时打印选举获胜者”失败

问题描述

编辑:固定!必须为 设置一个值(winscore winscores[11];),其余代码都很好,但可能更简洁一些。最后的条件是:

for (int i = 0; i < candidate_count; i++)
    {
        if (winscores[10].score >= winscores[i].score)
        {
            printf("%s\n", candidates[winscores[i].candidate]);        
        } 
    }

现在所有检查都通过了!


我正在研究 CS50 Tideman,但我的代码没有通过最终检查:“print_winner 在某些配对平局时打印选举获胜者”。

获胜者应该false在锁定矩阵中拥有最多,因此我计算 的最大数量false,然后按数量的降序排列false。然后我打印出数量最多的候选人false。然后我检查是否有更多具有相同数量的候选人false。如果有的话,我也打印出来。那应该打印获胜者,或者如果多个候选人具有相同数量的获胜者false......至少我认为,但它仍然没有通过最终检查。我不确定我的代码有什么问题,所以任何帮助将不胜感激!

typedef struct {
  int candidate;
  int score;
} winscore;

winscore winscores[11];

// Print the winner of the election
void print_winner(void) {
  // int maxscore = 0;
  // int maxscore[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

  for (int i = 0; i < candidate_count; i++) {
    for (int j = 0; j < candidate_count; j++) {
      if (locked[i][j] == false) {
        winscores[i].candidate = i;
        winscores[i].score++;
      }
    }
  }

  for (int i = 0; i < candidate_count; i++) {
    for (int j = 0; j < candidate_count; j++) {
      if (winscores[i].score < winscores[j].score) {
        winscores[10].candidate = winscores[i].candidate;
        winscores[10].score = winscores[i].score;

        winscores[i].candidate = winscores[j].candidate;
        winscores[i].score = winscores[j].score;

        winscores[j].candidate = winscores[10].candidate;
        winscores[j].score = winscores[10].score;
      }
    }
  }

  printf("%s\n", candidates[winscores[0].candidate]);

  for (int i = 0; i < 10; i++) {
    if (winscores[0].score == winscores[i].score) {
      printf("%s\n", candidates[winscores[i].candidate]);
    }
  }

  return;
}

标签: ccs50

解决方案


至少这个问题:winscores[i]缺少初始化导致winscores[i].score++;.

// winscore winscores[11];
winscore winscores[11] = { 0 };

推荐阅读