数组中最大元素的位置'数组[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)
解决最大实例位置问题,如何找到下一个实例位置?
答案 0 :(得分:1)
首先,在你给出的例子中
(int[]) {1, 2, 3}, 3 -> location 3
(int[]) {5, 15, 4, 7}, 4 -> location 2
第一个示例中的 3
与第二个示例中的4
处于相同的位置,因此它们在技术上应该具有相同的位置。我不确定您使用哪些代码来确定这些位置,但它不一致。
您的第三和第四个示例同样不一致。尽管问题的其余部分很清楚,但这种不一致性使您对自己的要求产生怀疑。
StackOverflow通常需要完整的最小测试用例。要求是:
您的代码无法编译,但它很容易将其包装到函数中并添加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
。size_t
和int
)使用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);
}
如果您对这些任务有任何疑问,请随时在评论中提出进一步的问题。