You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言数组操作:查找最大值索引并提取周边元素实现求助

C语言数组提取最大值周边元素实现方案

核心实现逻辑

  • 第三步需求为取最大值左侧2个元素、右侧3个元素+最大值本身,总计6个元素,取值区间为arr1[max_index - 2] 到 arr1[max_index + 3],直接遍历该区间拷贝元素即可。题目已明确最大值不在数组首尾,无需处理索引越界问题。

完整修改后代码

#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[6], i, pos=10, k1 = 0, k2 = 0, max_index=0, max;  

    // 生成前10个元素的新数组arr1
    for(i = 0; i < 10; i++)  
    {  
        if(i < pos)  
            arr1[k1++] = a[i];
        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];
    for (i = 0; i < 10; i++)
    {
        if (arr1[i] > max) {
            max = arr1[i];
            max_index = i;
        }
    }
    printf("Largest element = %d at index %d\n", max, max_index);

    // 第三步:生成包含最大值周边元素的arr2
    for(i = 0; i < 6; i++){
        arr2[i] = arr1[max_index - 2 + i];
    }

    // 输出arr2
    printf("new_array2[%d] = {", 6);
    for(i = 0; i < 6; i++){
        if(i == 5)
            printf("%d", arr2[i]);
        else
            printf("%d,", arr2[i]);
    }
    printf("}\n");

    return 0;
}

运行输出

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

关键代码说明

循环for(i = 0; i < 6; i++) arr2[i] = arr1[max_index - 2 + i]; 直接按偏移量取值:

  • i=0时取max_index-2(左数第2个元素)
  • i=1时取max_index-1(左数第1个元素)
  • i=2时取max_index(最大值本身)
  • i=3到i=5时分别取max_index+1、max_index+2、max_index+3(右侧3个元素)

内容的提问来源于stack exchange,提问作者Ashton Stark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:24:03