CS50 Runoff项目中二维数组赋值操作的作用是什么?
CS50 Runoff项目中
preferences[voter][rank] = i的作用解析 我正在完成CS50的Runoff项目,对解决方案中的一段代码存在疑问。以下是相关代码:
// Record preference if vote is valid bool vote(int voter, int rank, string name) { for (int i = 0; i < candidate_count; i++) { if (strcmp(name, candidates[i].name) == 0) { /* update the preferences 2d array to indicate the voter has that cand as their rank n */ preferences[voter][rank] = i; // preferences[1][j] = rank; printf("voter: %d\n", voter); printf("rank: %d\n", rank); return true; } } return false; }
请问代码中preferences[voter][rank] = i这行二维数组赋值操作的作用是什么?
这行代码的核心作用就是记录某个选民的某一顺位投票对应的候选人索引,拆解细节:
voter是当前投票选民的编号,rank代表该投票的顺位(比如第1选择、第2选择)i是遍历过程中,名字匹配成功的候选人在candidates数组里的索引- 将
i存入preferences[voter][rank],相当于给这个选民的第rank顺位投票绑定了对应的候选人身份
举个实际场景:如果选民0的第1顺位投给了候选人Alice,而Alice在candidates数组里的索引是2,那这行代码会把preferences[0][1]的值设为2。后续计票阶段,程序就能通过这个二维数组快速查询每个选民在每一轮应该把票归属给哪个候选人。
顺带补充这段函数的逻辑:它会遍历所有候选人,用strcmp比对投票名字和候选人名字,找到匹配项后完成上述赋值,返回true标记投票有效;如果遍历完所有候选人都没找到匹配,就返回false表示这是一张无效票。
内容的提问来源于stack exchange,提问作者Kenneth Phoe
相关产品推荐
相关产品推荐

