【问题标题】:Find the index of the largest element in an array and find elements N indexes to the right and left of that max element查找数组中最大元素的索引,并在该最大元素的右侧和左侧查找元素 N 个索引
【发布时间】:2021-11-07 00:03:27
【问题描述】:

我正在编写一些涉及数组操作的 c 代码。 我正在努力实现以下目标:

  1. 使用给定的输入数组,创建一个仅包含前 10 个元素的 new_array
  2. 在 new_array 中找到 index_of_largest 元素
  3. 将 index_of_largest 左侧的 2 个元素和右侧的 3 个元素全部放入一个 new_array2 中
For example if array[15] = {12,25,99,56,44,79,62,11,10,2,1,3,4,5,6}
then new_array[10] = {12,25,99,56,44,79,62,11,10,2}
then new_array2 [6]={12,25,99,56,44,79}

这是我当前的代码:

#include<stdio.h>  
  
  
int main()  
{  
    int a[15]={12,25,99,56,44,79,62,11,10,2,1,3,4,5,6}, arr1[10], arr2[5], i, pos=10, k1 = 0, k2 = 0, max_index, max;  
  
    for(i = 0; i < 10; i++)  
    {  
        if(i < pos)  
            arr1[k1++] = a[i];  //seperate array
        else  
            arr2[k2++] = a[i];  
    }  
  
    printf("\nElements of First Array -> arr1[%d]\n", k1);  
    for(i = 0; i < k1; i++)  
        printf("%d\n", arr1[i]); 

    max  = arr1[0]; //find index of max element
    for (i = 0; i < 10; i++)
    {
        if (arr1[i] > max) {
            max = arr1[i];
            max_index = i;
        }
    }
    printf("Largest element = %d at index %d", max, max_index);

    return 0;
    }

输出:

Elements of First Array -> arr1[10]
12
25
99
56
44
79
62
11
10
2
Largest element = 99 at index 2

我能够分离初始数组 (1) 能够找到最大元素的索引 (2)。我不知道如何解决(3)从我目前的观点向前发展。 最大的索引将始终位于数组中的某个位置,以便可以将元素放在它周围。 (例如最大值不会是第一个或最后一个索引) 我还认为我应该添加一个条件,以便如果有多个最大值,我们取第一个出现的最大值。 将来我会将所有这些都包装在一个函数调用中,但对于目前混乱的代码感到抱歉。

【问题讨论】:

  • 答案到达后更改代码/问题是糟糕的礼仪。最好回滚。
  • 您将arr2 定义为int[5],但您打算在其中存储6 个元素。
  • @Stef 对不起,我不明白,如果我的 a[15] 有元素并且 arr1[10] 不会 arr2 只剩下 5 个元素吗?除非我对 c 的从 0 开始的索引感到困惑。我不需要 arr2 任何东西(只是用来存储垃圾元素),但我想了解您提出的观点。
  • @AshtonStark 好吧,您的帖子首先解释说您要复制新数组中的前 10 个项目,然后从新数组到第二个新数组。我假设这两个新数组是arr1arr2。如果你真的只是定义arr2 来存储垃圾元素,那么你根本不需要arr2;忽略垃圾元素。
  • 实际上,你定义pos=10,然后有一个带有条件i&lt;10的循环,然后在循环内部if (i &lt; pos)。 “如果”的条件显然总是为真,所以你根本不需要这个“如果”。

标签: arrays c sorting indexing element


【解决方案1】:

您正在使用%f 格式说明符,这是用于floats 和doubles。 maxint,您需要使用 %d 或类似名称:

printf("Largest element = %d at index %d", max, max_index);

有关printf 格式说明符的更多信息,请参阅man page

【讨论】:

  • 啊,你是对的,不知道我是怎么搞砸的哈哈,谢谢!!我将对上面的代码进行这些更改。
  • @AshtonStark “不知道我是怎么搞砸的” ---> 因为你没有使用好的编译器,所以所有警告都会启用。节省时间,启用编译器警告。
  • @Reinstate Monic 没错,没有抛出错误标志或警告。我正在使用 VS 代码,您有更好的 ide 推荐吗?
  • @AshtonStark 相关问题:How to include compiler flags in Visual Studio Code?。我建议你至少设置-Wall -Wextra -Werror。其他标志也可能很有趣,例如-Wfloat-equal
  • 谢谢你,这将使调试更容易
猜你喜欢
  • 2021-07-02
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 2021-06-20
  • 1970-01-01
  • 2014-11-08
相关资源
最近更新 更多