【问题标题】:What is the best way to count the number of times a value occurs in an array?计算一个值在数组中出现的次数的最佳方法是什么?
【发布时间】:2011-11-24 23:26:34
【问题描述】:

我被分配了一个任务来编写一个程序,该程序从文本文件中读取多个赋值标记到一个数组中,然后计算特定括号内有多少个标记,即 40-49、50-59 等. 文本文件中值为-1表示作业未上交,值为0表示作业太差,未评分。

我可以使用几个for 循环轻松地做到这一点,然后使用if 语句来检查值,同时增加适当的整数来计算出现次数,但是为了获得更高的分数,我需要实现该程序以“更好”的方式。有什么更好、更有效的方法来做到这一点?我现在不是在寻找代码,只是简单地“这是你应该做的”。我试图想出不同的方法来做到这一点,但似乎没有一个更好,我觉得我只是为了让它变得复杂。

我尝试使用存储值的二维数组作为函数的参数,然后使用该函数打印出特定值的出现次数,但我无法将其编译为我的使用 2D 数组作为参数的语法是错误的,我不太确定如何执行此操作。

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 所有的范围都是十个数字吗?

标签: c function pointers parameters


【解决方案1】:

为什么需要一对 for 循环?一个就够了。

创建一个大小为 10 的数组,其中 array[0] 是 0-9 之间的标记,array[1] 是 10-19 之间的标记,等等。当你看到一个数字时,使用整数除法将它放入适当的数组桶中,例如数组[(int)mark/10]++。完成后,数组将包含每个桶中标记数的计数。

【讨论】:

  • 我需要使用一个二维数组先存储文本文件中的值,然后查看这个数组来确定有多少个标记小于 40,介于 40 和 50、50 和 60 之间, 60 和 70,并且大于 70。值 -1 也意味着作业没有上交。
【解决方案2】:

作为思考的食物,如果这是一项学校作业,您可能想应用您在课程中学到的其他东西。

你学会排序了吗?也许您可以先对列表进行排序,这样您就不会多次迭代数组。你可以只看一遍,抓住所有的-1,然后吐出你有多少,然后抓住下一个括号中的所有,依此类推。

编辑:当然,假设您使用的是一维数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-11
    • 2022-09-22
    • 1970-01-01
    • 2013-12-03
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    相关资源
    最近更新 更多