2016-04-28 49 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