簡體   English   中英

在給定數組中找到第三大偶數分數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM