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

C语言实现输出数组中仅出现一次的元素 程序运行异常求助

问题修复方案

原代码核心错误点

  • 遍历过程中随意修改代表数组总长度的size变量,导致循环边界异常,逻辑完全偏离预期
  • 重复判断逻辑未排除i == j(元素和自身比较)的情况,只要匹配到相等值就直接缩短遍历长度,无法正确统计出现次数
  • 赋值语句误写为相等判断:newArr[i] == array[j]; 实际未给新数组赋值,新数组为未初始化的栈内存,所以输出随机乱数
  • 整体筛选逻辑错误:没有统计每个元素的出现次数,无法筛选出仅出现一次的元素

修复思路

由于输入值范围固定为10~100,仅91个可能的取值,采用计数法实现最简单高效:

  1. 新增计数数组,长度覆盖所有可能的输入值,初始值全为0
  2. 遍历输入的20个有效元素,对应数值的计数位累加1
  3. 遍历计数数组,输出计数为1的数值即可

修正后完整代码

#include <stdio.h>

int main() {
    const int size = 20;
    int array[size];
    int count_map[101] = {0}; // 覆盖0~100的所有可能取值
    int number = 0;
    
    // 输入20个有效数值
    for(int count = 0; count < size; count++) {
        printf("\nAnna %d. luku > ", count+1);
        scanf("%d", &number);
        // 输入校验
        while(number > 100 || number < 10) {
            printf("Ei kelpaa.\n");
            printf("Yrita uudelleen > ");
            scanf("%d", &number);
        }
        array[count] = number;
        count_map[number]++; // 直接累加计数
    }

    // 输出仅出现一次的元素
    printf("仅出现一次的元素如下:\n");
    for(int i = 10; i <= 100; i++) {
        if(count_map[i] == 1) {
            printf("%d\n", i);
        }
    }

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:18:03