![](/img/trans.png)
[英]C++ Finding the index of the largest element in an array, even if there is multiple max elements
[英]Finding the third largest even fraction in a given array
我必須找到給定數組中的第三大偶數分數。 我知道分數不能是奇數或偶數,但是根據准則,即使分子也是偶數,分數也是。 我已經獲得了部分工作的代碼。
測試用例1:
1/2
2/3
2/5
2/7
該程序將正確地返回2/7
作為第三大偶數分數。
測試案例2:
1/2
2/3
2/5
2/7
2/5
當我期望輸出2/7
時,該程序將返回2/5
作為第三大參數。
測試案例3:
1/2
2/3
2/5
2/5
2/7
2/7
該程序仍應返回2/7
,但它會回吐2/5
誰能給我一個提示或指出我的邏輯錯在哪里? 如果值不是重復的,則代碼將起作用。 這是我的嘗試。
int main() {
Fraction largest;
Fraction secondlargest;
Fraction thirdlargest;
Fraction** arr;
int size;
std::cout << "How many fractions? ";
std::cin >> size;
arr = new Fraction*[size] {nullptr};
for (int i = 0; i < size; i++) {
createFraction(&arr[i]);
}
for (int i = 0; i < size; i++) {
if (arr[i]->getNum() % 2 == 0) {
if (largest < *arr[i]) {
thirdlargest = secondlargest;
secondlargest = largest;
largest = *arr[i];
}
else if (secondlargest < *arr[i]) {
thirdlargest = secondlargest;
secondlargest = *arr[i];
}
else if (thirdlargest < *arr[i]) {
thirdlargest = *arr[i];
}
}
}
std::cout << thirdlargest << " is the third largest even fraction.";
for (int i = 0; i < size; i++) {
delete arr[i];
}
delete[] arr;
return 0;
}
只需在第二個和第三個示例中逐步完成您的代碼即可:
2nd example:
1/2 -> doesn't enter the outside if.
2/3 -> set as largest.
2/5 -> set as second largest.
2/7 -> set as third largest.
2/5 -> set as third largest.
與第三個示例類似的現象,您不會考慮重復項,因此會得到錯誤的結果。
要查看該問題,請考慮兩次輸入相同分數時會發生什么情況:
largest
second_largest
,如果您不希望考慮重復second_largest
,則此設置不正確 您應該更改代碼以使用模式:
if (largest < *arr[i]) {
thirdlargest = secondlargest;
secondlargest = largest;
largest = *arr[i];
} else if (largest != *arr[i]) {
if (secondlargest < *arr[i]) {
thirdlargest = secondlargest;
secondlargest = *arr[i];
} else if (secondlargest != *arr[i]) {
if (thirdlargest < *arr[i]) {
thirdlargest = *arr[i];
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.