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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:06:07