CS50 Tideman - 添加配对
CS50 Tideman - Add Pair
我目前正在解决 CS50 的 Tideman 问题,我正在使用 add_pairs 功能。到目前为止,这是我的代码:
// Record pairs of candidates where one is preferred over the other
void add_pairs(void)
{
for (int i = 0; i < candidate_count; i++) {
for (int j = 0; j < candidate_count; j++) {
if (preferences[i][j] > preferences[j][i]) {
pairs[i].winner = i;
pairs[i].loser = j;
pair_count += 1;
}
}
}
return;
}
我的代码几乎通过了,但未通过 add_pairs 测试之一:
:( add_pairs fills pairs array with winning pairs
add_pairs function did not produce correct pairs
通过谷歌搜索,我看到一个单独的 else if 块必须检查是否 preferences[i][j] < preferences[j][i]
。然后我们根据这个额外的 else/if 检查分配 winner/loser 组合索引。
但我就是想不通为什么我们需要这个额外的 if 语句?上面的嵌套循环(我的代码)是否根据其反向索引对应物检查 table 内的所有单元格?这意味着我们不需要检查其他 else/if 条件,因为我们首先检查了所有可能性?例如,如果我们想检查索引 (0,1) 处的值与其相反的值 (1,0) - 上面的嵌套循环保证通过 if 语句?[=13 相互检查两个索引=]
考虑有 4 名候选人 a、b、c、d(索引分别为 0 到 3)的选举。根据这个程序:
- a 打败 b => pairs[0].winner = a, pairs[0].loser = b
- a 打败 c => pairs[0].winner = a, pairs[0].winner = c
- a 打败 d => pairs[0].winner = a, pairs[0].winner = d
你知道这是怎么回事吗? pairs数组索引独立于候选数组索引。
pairs 数组的索引与候选人的索引无关,因此您应该使用另一个变量作为索引,而不是代码中的 i 或 j。
我目前正在解决 CS50 的 Tideman 问题,我正在使用 add_pairs 功能。到目前为止,这是我的代码:
// Record pairs of candidates where one is preferred over the other
void add_pairs(void)
{
for (int i = 0; i < candidate_count; i++) {
for (int j = 0; j < candidate_count; j++) {
if (preferences[i][j] > preferences[j][i]) {
pairs[i].winner = i;
pairs[i].loser = j;
pair_count += 1;
}
}
}
return;
}
我的代码几乎通过了,但未通过 add_pairs 测试之一:
:( add_pairs fills pairs array with winning pairs
add_pairs function did not produce correct pairs
通过谷歌搜索,我看到一个单独的 else if 块必须检查是否 preferences[i][j] < preferences[j][i]
。然后我们根据这个额外的 else/if 检查分配 winner/loser 组合索引。
但我就是想不通为什么我们需要这个额外的 if 语句?上面的嵌套循环(我的代码)是否根据其反向索引对应物检查 table 内的所有单元格?这意味着我们不需要检查其他 else/if 条件,因为我们首先检查了所有可能性?例如,如果我们想检查索引 (0,1) 处的值与其相反的值 (1,0) - 上面的嵌套循环保证通过 if 语句?[=13 相互检查两个索引=]
考虑有 4 名候选人 a、b、c、d(索引分别为 0 到 3)的选举。根据这个程序:
- a 打败 b => pairs[0].winner = a, pairs[0].loser = b
- a 打败 c => pairs[0].winner = a, pairs[0].winner = c
- a 打败 d => pairs[0].winner = a, pairs[0].winner = d
你知道这是怎么回事吗? pairs数组索引独立于候选数组索引。
pairs 数组的索引与候选人的索引无关,因此您应该使用另一个变量作为索引,而不是代码中的 i 或 j。