2016-04-28 56 views
2

我需要在數組中找到3個最大的數字,然後將它們加在一起。如何在C中找到3個最大的偶數?

例如: 輸入:3 4 7 10 11 16 16 23 26 輸出:3個最大偶數的總和是:16,16,26,和是58

在我的代碼,我得到奇怪的輸出,如「16,1245782582792,1」。

注意:我只能使用ifs/else,for/while循環和數組。

#include <stdio.h> 
+0

你自己做過任何調試嗎?使用調試器和/或調試打印語句來跟蹤程序的執行情況? – kaylum

+0

您正在掃描9個號碼,然後檢查13個號碼。你出界了 – Michi

+0

如果你的輸入是'... 16 16 23 26',三個最大的數字不會是16,23和26(= 65)嗎? – dreamlax

回答

3

這裏有幾個問題:

  1. 您應該只檢查中定義的數組項。相反,您正在查看整個陣列,包括從nNumbersMAX_NUMBERS-1的未定義部分。你可能會在那裏拾取垃圾值。更改for循環到:

    for (i = 0; i < nNumbers; i++) 
    
  2. 要初始化greatest1等陣列中的第一個數字。如果這個數字很奇怪,並且恰好足夠大,可以阻止您要查找的偶數,那麼這種方法就行不通。

  3. 如果其中一個最大偶數出現多次,您將忽略重複項。例如,如果最大的數字是1000,並且它發生三次,那麼您可能希望添加全部三個並返回3000.您可以通過跟蹤所選的索引來解決此問題,並且只在索引匹配時拒絕重複而不是價值。

+0

謝謝!你的答案幫了我很多:)我的代碼不再輸出隨機數。我不知道如何去跟蹤索引,因爲我從來沒有這樣做(剛剛從2周前開始C編程)。你能提供一個例子嗎? – cheese425

+0

好吧,假設'array [7]'是120.而不是將120保留在'greatest1'中,請將7保存在'greatest1_ix'中。在比較值時,使用'array [greatest1_ix]'而不是'greatest1'。到目前爲止,行爲將保持不變。但是,當檢查重複項時,請使用'greatest1_ix'。這樣它只會被看作是重複的,如果它出現在'array'中的同一個索引處。 –

+0

非常感謝,我非常感謝你的幫助:) – cheese425

相關問題