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
相关产品推荐
相关产品推荐

