我需要在數組中找到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>
我需要在數組中找到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>
這裏有幾個問題:
您應該只檢查中定義的數組項。相反,您正在查看整個陣列,包括從nNumbers
到MAX_NUMBERS-1
的未定義部分。你可能會在那裏拾取垃圾值。更改for
循環到:
for (i = 0; i < nNumbers; i++)
要初始化greatest1
等陣列中的第一個數字。如果這個數字很奇怪,並且恰好足夠大,可以阻止您要查找的偶數,那麼這種方法就行不通。
如果其中一個最大偶數出現多次,您將忽略重複項。例如,如果最大的數字是1000,並且它發生三次,那麼您可能希望添加全部三個並返回3000.您可以通過跟蹤所選的索引來解決此問題,並且只在索引匹配時拒絕重複而不是價值。
謝謝!你的答案幫了我很多:)我的代碼不再輸出隨機數。我不知道如何去跟蹤索引,因爲我從來沒有這樣做(剛剛從2周前開始C編程)。你能提供一個例子嗎? – cheese425
好吧,假設'array [7]'是120.而不是將120保留在'greatest1'中,請將7保存在'greatest1_ix'中。在比較值時,使用'array [greatest1_ix]'而不是'greatest1'。到目前爲止,行爲將保持不變。但是,當檢查重複項時,請使用'greatest1_ix'。這樣它只會被看作是重複的,如果它出現在'array'中的同一個索引處。 –
非常感謝,我非常感謝你的幫助:) – cheese425
你自己做過任何調試嗎?使用調試器和/或調試打印語句來跟蹤程序的執行情況? – kaylum
您正在掃描9個號碼,然後檢查13個號碼。你出界了 – Michi
如果你的輸入是'... 16 16 23 26',三個最大的數字不會是16,23和26(= 65)嗎? – dreamlax