如何使用C ++计算1-100数组中的覆盖百分比?

时间:2014-07-07 08:22:43

标签: c++ algorithm

这是一项任务,所以我不希望得到直接答案;相反,任何逻辑帮助我的算法(或指出任何逻辑缺陷)将是非常有帮助和赞赏!

我有一个程序从用户接收“n”个元素以放入一维数组。 该数组使用随机生成的数字。 IE:如果用户输入88,则生成88个随机数(每个在1到100之间)的列表。 “n”最多为100.

我必须写两个函数。

功能#1:

Determine the percentage of numbers that appear in the array of "n" elements.
So any duplicates would decrease the percentage.
And any missing numbers would decrease the percentage.
Thus if n = 75, then you have a maximum possible %age of 0.75 
(this max %age decreases if there are duplicates)

This function basically calls upon function #2. 

FUNCTION HEADER(GIVEN) = "double coverage (int array[], int n)"

功能#2:

Using a linear search, search for the key (key being the current # in the list of 1 to 100, which should be from the loop in function #1), in the array.

Return the position if that key is found in the array 
(IE: if this is the loops 40th run, it will be at the variable "39", 
and will go through every instance of an element in the array 
and if any element is equal to 39, all of those positions will be returned? 
I believe that is what our prof is asking)

Return -1 if the key is not found. 

Given notes = "Only function #1 calls function #2, 
and does so to find out if a certain value (key) is found among the first n elements of the array."

FUNCTION HEADER(GIVEN) = "int search (int array[], int n, int key)"

我真正需要帮助的是算法的逻辑。

我很感激任何帮助,因为我会完全不同于我们教授想要的方式解决这个问题。

我的第一个想法是为所有1到100的变量键遍历函数#1。 在该循环中,转到搜索功能(功能#2),其中循环将遍历数组中的每个数字,如果数字是(1)重复或(2)不存在,则添加到计数器数组。然后我将从100减去该计数器。因此,如果除了#40和#41之外所有数字都包含在数组中,然后#77是重复的,则覆盖的总百分比将是100-3 = 97%。

虽然我打字的时候我觉得这本身可能有缺陷吗? ^因为数组中最多有100个元素,如果唯一丢失的数字是99,那么你将减去1以使该数字丢失,然后如果有重复,你将减去另外1,从而你的覆盖百分比将是(100-2)= 98,显然它应该是99.

这就是为什么我真的很感激任何逻辑帮助。 :)

我知道我在逻辑上遇到了一些问题。

我想我可以相对轻松地找出编码;我最挣扎的是采取的步骤。所以任何伪代码的想法都会令人惊叹!

(如果有必要,我可以发布我的整个程序代码,只要问一下,但是现在它已经很长了,因为我有很多其他函数在程序中执行其他任务) 编辑:我看到有多人编辑我的帖子/标签。标签不是我放的xD所以请不要低估我的问题,因为你必须编辑它?D:有人刚刚编辑回原来的方式,然后别人编辑了它。阿

3 个答案:

答案 0 :(得分:1)

我可能会弄错,但是当我读到它时,您需要做的就是:

  • 编写一个循环遍历n个元素数组的函数,以查找其中的给定数字。如果在数组中找不到数字,它将返回第一次出现的索引,或者返回负值。
  • 写一个循环来调用所有数字1到100的函数并计算查找次数。然后将结果除以100。

答案 1 :(得分:0)

我不确定我是否理解这一切,但是你可以做到1个功能,如果你不关心速度,最好将数组放入{{{ 1}},循环1..100并使用boost find function http://www.boost.org/doc/libs/1_41_0/doc/html/boost/algorithm/find_nth.html。在那里,您可以将当前值与向量中的第二个条目值进行比较,如果它包含减少而不是减少,如果要查找唯一编号是否在数组中,请使用http://www.cplusplus.com/reference/algorithm/find/。我不明白,这个百分比是如何减少的,​​所以它是你自己的,我不理解第二个功能,但是如果它的线性搜索再次使用就找不到。 附:矢量描述http://www.cplusplus.com/reference/vector/vector/begin/

答案 2 :(得分:0)

您想知道给定数组中[1,100]范围内有多少个数字。您可以依次搜索每个号码:

size_t count_unique(int array[], size_t n)
{
    size_t result = 0;

    for (int i = 1; i <= 100; ++i)
    {
        if (contains(array, n, i))
        {
            ++result;
        }
    }

    return result;
}

您仍需要的是收容检查contains(array, n, i)的实施,并将唯一计数转换为百分比(通过使用除法)。