Rank the top k brands by rating, breaking ties with the review count. This builds on v4's repeated search (not on v5: there is no filtering here); only the comparison gets a second criterion.
You start with:
string[] brands = {"TechPro", "MegaCorp", "NeoByte", "Quantum", "Zenith"};
int[] ratings = {4, 5, 5, 3, 4};
int[] reviews = {200, 150, 500, 100, 300};
int k = 3;
Build:
1. NeoByte (5, 500) 2. MegaCorp (5, 150) 3. Zenith (4, 300)
Rules:
- Rating decides first: the higher rating wins.
- If two brands have the same rating, the one with more reviews wins.
- If rating and reviews are both equal, the one listed first wins (the test data has no such pair, but your code must follow the rule).
kis never larger than the number of brands.- Each line is
"rank. Brand (rating, reviews)", starting at rank 1. - Print the lines, one per line, with
Console.WriteLine(...).
Start from v4: the same
bool[] used = new bool[ratings.Length]; and List<string> lines = new List<string>();, the same two loops. Only the comparison inside the inner loop changes.
Use a chain (if / else if / else if): no candidate yet, take this one; else a higher rating, take this one; else the same rating and more reviews, take this one.
string[] brands = {"TechPro", "MegaCorp", "NeoByte", "Quantum", "Zenith"};
int[] ratings = {4, 5, 5, 3, 4};
int[] reviews = {200, 150, 500, 100, 300};
int k = 3;
bool[] used = new bool[ratings.Length];
List<string> lines = new List<string>();
for (int rank = 1; rank <= k; rank++) {
int bestIndex = -1;
for (int i = 0; i < ratings.Length; i++) {
if (!used[i]) {
if (bestIndex == -1) {
bestIndex = i;
}
else if (ratings[i] > ratings[bestIndex]) {
bestIndex = i;
}
else if (ratings[i] == ratings[bestIndex] && reviews[i] > reviews[bestIndex]) {
bestIndex = i;
}
}
}
used[bestIndex] = true;
lines.Add(rank + ". " + brands[bestIndex] + " (" + ratings[bestIndex] + ", " + reviews[bestIndex] + ")");
}
Console.WriteLine(string.Join("\n", lines));
Free plan: 30 tutor messages. Premium is unlimited.
Saved
Ctrl + Enter to check
