在C中找到最大元素的位置,位置实例

时间:2015-05-23 00:08:25

标签: c arrays

数组中最大元素的位置'数组[n]'必须找到,因此使用以下代码

int i, maximum; int location = 1;

//the array value and n value will be scanned in
maximum = array[0];

for( i=0; i<n; i++ ) {
    if(array[i] > maximum){
        maximum = array[i];
        location = i+1;
    }
}

return location;

这将返回

下面的示例数组的输出
(int[]) {1, 2, 3}, 3     -> location 3
(int[]) {5, 15, 4, 7}, 4 -> location 2

因此,在上面的数组的情况下,代码运行良好。当一个数组包含两个或多个更大数字的实例时,代码就会失败。

(int[]) {15, 15, 5, 7}, 4    -> location 1 (checks 1st location and stays)
(int[]) {45, 23, 55, 45}, 4  -> location 2 (checks 1st location and stays)

解决最大实例位置问题,如何找到下一个实例位置?

1 个答案:

答案 0 :(得分:1)

首先,在你给出的例子中

(int[]) {1, 2, 3}, 3     -> location 3
(int[]) {5, 15, 4, 7}, 4 -> location 2
第一个示例中的

3与第二个示例中的4处于相同的位置,因此它们在技术上应该具有相同的位置。我不确定您使用哪些代码来确定这些位置,但它不一致。

您的第三和第四个示例同样不一致。尽管问题的其余部分很清楚,但这种不一致性使您对自己的要求产生怀疑。

StackOverflow通常需要完整的最小测试用例。要求是:

  • 您的代码必须极少。无论问题是什么,我们都应该很容易发现。作为指导原则,如果您的代码大于50行,您应该尝试修剪任何不必要的逻辑,并在必要时用静态值填补空白。
  • 如果您的问题是错误消息,则您的代码必须生成相同的错误消息。
  • 如果你的问题是合乎逻辑的,你的代码必须编译并运行,产生错误的行为,而我们不必填写空白或纠正任何错误,最好不要让我们输入任何输入。

您的代码无法编译,但它很容易将其包装到函数中并添加main入口点。如果您将来采用这些步骤制作最小的测试用例,那将是最好的。

size_t get_first_maximum_index(int *array, size_t array_size) {
    int i, maximum; int location = 1;

    //the array value and n value will be scanned in
    maximum = array[0];

    for( i=0; i<n; i++ ) {
        if(array[i] > maximum){
            maximum = array[i];
            location = i+1;
        }
    }

    return location;
}

我冒昧地为您的代码添加了所需的界面,但我保持代码不变。您所要做的就是将逻辑连接到接口:

  • 使用array_size代替n
  • 返回实际的数组索引,而不是数组索引+ 1。
  • 建议:对数组索引(size_tint)使用i而不是location,因为数组索引永远不应为负数。

完成上述操作后,您应该可以使用此功能收集初始最大索引,如下所示:size_t index = get_first_maximum_index(array, array_size);

...对于每个具有相同值的实例,您需要一个不同的函数,我建议将其命名为get_next_maximum_index

size_t get_next_maximum_index(int *array, size_t array_size, int current_maximum) {
     /* XXX:
      * Find the next value within array that contains current_maximum and return it,
      * ... or array_size if none found
      */
}

我有信心,如果您是编写OP中发布的代码的人,您应该能够自己完成该功能。接下来,找到最大值的第一个和后续索引的示例如下所示:

#include <stdio.h>
#include "maximum_int_search.h"

int main(void) {
    int array[] = { 15, 15, 5, 7 };
    size_t array_size = sizeof array / sizeof *array;
    size_t index = get_first_maximum_index(array, array_size);
    do {
        printf("Maximum value at array[%zu]: %d\n", index, array[index]);
        index = get_next_maximum_index(array + index + 1, array_size - index - 1);
    } while (index != array_size);
}

如果您对这些任务有任何疑问,请随时在评论中提出进一步的问题。