【问题标题】:How to find 3 largest even numbers in an array with C?如何用C在数组中找到3个最大的偶数?
【发布时间】:2016-04-28 02:22:37
【问题描述】:

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

【问题讨论】:

  • 你自己调试过吗?使用调试器和/或调试打印语句来跟踪程序的执行?
  • 您正在扫描 9 个号码,然后检查 13 个号码。你越界了
  • 如果你的输入是... 16 16 23 26,那三个最大的数不就是16、23和26(= 65)吗?
  • 数字必须是偶数。

标签: c arrays loops if-statement


【解决方案1】:

这里有几个问题:

  1. 您应该只检查已定义的数组条目。相反,您正在查看整个数组,包括从nNumbersMAX_NUMBERS-1 的未定义部分。您可能会在那里捡起垃圾值。将您的 for 循环更改为:

    for (i = 0; i < nNumbers; i++)
    
  2. 您正在将greatest1 等初始化为数组中的第一个数字。如果数字是奇数并且恰好大到足以阻止您要查找的偶数,则此方法不起作用。

  3. 如果最大的偶数之一出现不止一次,您将忽略重复项。例如,如果最大数字是 1000,并且它出现了 3 次,您可能希望将所有三个相加并返回 3000。您可以通过跟踪您选择的索引来解决此问题,并且仅在索引匹配时拒绝重复,而不是值。

【讨论】:

  • 谢谢!您的回答对我帮助很大:) 我的代码不再输出随机数。我不确定如何跟踪索引,因为我以前从未这样做过(两周前才开始 C 编程)。能举个例子吗?
  • 好吧,假设 array[7] 是 120。不要在 greatest1 中保留 120,而是在 greatest1_ix 中保留 7。比较值时,使用array[greatest1_ix] 而不是greatest1。到目前为止,行为将保持不变。但是,在检查重复项时,请使用greatest1_ix。这样,如果它出现在 array 中的同一索引处,它只会被视为重复。
  • 非常感谢,非常感谢您的帮助:)
猜你喜欢
  • 2020-05-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 2020-09-22
  • 2022-10-14
相关资源
最近更新 更多