我有一個結構數組,我需要從中檢索數據。該數組包含名稱和分數。C++壓縮兩個for循環提高效率
對於一個功能,我必須輸出最高得分和相關聯的名稱。如果有多種情況,我必須輸出所有名稱。
我不能使用矢量或列表。 (否則我會)我只想在同一步驟中執行這兩個操作。
這是我如何處理它:
void highScorer ( player array[], int size)
{ // highScorer
int highScore = 0; //variable to hold the total score
// first loop determines highest score
for (int i = 0; i < size; i++) {
if (array[i].pointsScored > highScore) {
highScore = array[i].pointsScored;
}
}
cout << "\nThe highest scoring player(s) were:\n";
// second loop finds players with scores matching highScore and prints their name(s)
for (int i = 0; i < size; i++) {
// when a match is found, the players name is printed out
if (array[i].pointsScored == highScore) {
cout << array[i].playerName;
cout << ", scored ";
// conditional will output correct grammar
if (array[i].pointsScored > 1) {
cout << array[i].pointsScored << " points!\n";
}
else {
cout << array[i].pointsScored << " point!\n";
}
}
}
cout << "\n"; // add new line for readability
return;
} // highScorer
我想這凝結到一個for循環。除非有人建議採用更有效的方法。我認爲排序數據是沒有必要的。此外,如果它是分類的,那麼如何確定一步中是否存在多個「highScore」情況。
在這種情況下進行兩次通過是典型的,它仍然是線性的。如果你真的希望你可以保留一個索引列表,然後在找到新的高分時清空它。 –
Minor nitpicks:'return;'在'void'函數末尾是不必要的,並且一些評論過多(我正在看你,'//爲了可讀性增加新行)。 –
哈哈!男人我完全同意你@Brendan Long,但它是作業,他們想要過度評論。不過,你是對的。 – frankV