C语言如何将10元素数组的最大5项替换为1、最小5项替换为0
C语言数组高低值替换实现方案
实现思路
- 首先保留原数组的索引顺序,不能直接对原数组排序,否则会丢失原始位置信息
- 拷贝原数组到临时数组后做升序排序,排序后前5个元素为最小值组,后5个为最大值组
- 取排序后临时数组第5个元素(索引为4,从0计数)作为分界阈值
- 遍历原始数组,所有小于等于阈值的元素替换为0,大于阈值的替换为1
完整实现代码
#include <stdio.h> #include <stdlib.h> // qsort排序需要的比较函数,升序排序 int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; } int main() { int arr[10]; // 输入10个整数 printf("请输入10个整数:"); for (int i = 0; i < 10; i++) { scanf("%d", &arr[i]); } // 打印原始数组 printf("原始数组内容:"); for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } printf("\n"); // 拷贝原数组到临时数组用于排序 int temp[10]; for (int i = 0; i < 10; i++) { temp[i] = arr[i]; } // 对临时数组升序排序 qsort(temp, 10, sizeof(int), cmp); // 取分界阈值:前5小的元素的最大值 int threshold = temp[4]; // 替换原数组元素 for (int i = 0; i < 10; i++) { arr[i] = arr[i] > threshold ? 1 : 0; } // 打印处理后的数组 printf("处理后的新数组:"); for (int i = 0; i < 10; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; }
代码说明
- 使用
qsort标准库函数做排序,避免手动实现排序逻辑的冗余代码 - 临时数组的作用是仅用来计算分界阈值,全程不修改原数组的元素顺序,保证替换逻辑和原始位置对应
- 阈值取排序后索引为4的元素,刚好把10个元素分为5个小于等于阈值(替换为0)、5个大于阈值(替换为1)的两组,和题目要求完全匹配
运行示例
输入:44 11 6 99 30 78 32 31 66 55
输出:
原始数组内容:44 11 6 99 30 78 32 31 66 55
处理后的新数组:1 0 0 1 0 1 0 0 1 1
完全符合题目给出的示例效果。
内容的提问来源于stack exchange,提问作者046_Bhargav Kumar Nath
相关产品推荐
相关产品推荐

