我需要在数组中找到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