不用INT_MIN来写上面的题目
时间: 2024-10-19 21:05:28 浏览: 12
当然可以。为了找出最高分学员而不使用`INT_MIN`,我们可以创建一个临时变量来保存当前已知的最大分数。同时,我们需要一个标志变量来追踪是否有新的最高分。这里是不需要`INT_MIN`的版本:
```c
int findBetterTotalScore(int totalScore, int currentBestScore, int *bestIndex, struct STU *students, int studentCount) {
if (totalScore > currentBestScore || (totalScore == currentBestScore && !(*bestIndex)) {
*bestIndex = students->no; // 更新最高分学员的索引
currentBestScore = totalScore; // 保存新的最高分
}
return currentBestScore;
}
int find(struct STU student[], int n, struct STU champion[]) {
int currentMaxScore = 0, bestIndex = -1;
int i;
for (i = 0; i < n; i++) {
int totalScore = student[i].pullup + student[i].ldrun + student[i].srun + student[i].situps;
currentMaxScore = findBetterTotalScore(totalScore, currentMaxScore, &bestIndex, &student[i], n);
if (currentMaxScore == student[i].pullup + student[i].ldrun + student[i].srun + student[i].situps) { // 检查是否有并列最高分
champion[count++] = student[i]; // 将并列最高分的学员添加到结果数组中
}
}
// 返回第一名的数量
return count;
```
这个版本中,我们用`findBetterTotalScore`函数来递归地更新最高分和其对应的学员索引,而不是依赖于全局常量`INT_MIN`。当找到更高分或等分时,我们就更新`bestIndex`和`currentMaxScore`。在循环结束之后,`count`将包含第一名学员的数量。
阅读全文