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

C语言统计数组重复元素个数方法及示例代码逻辑释义咨询

C语言数组重复元素计数代码逻辑讲解

你贴的代码核心思路是标记已统计的重复项,避免重复计数,以下是逐段拆解:

完整代码

#include <stdio.h>
#include <conio.h>

int main()
{
    int a[10],i,j,n,c=0 ;
    printf("Enter size of the array : ");
    scanf("%d", &n);
    printf("\nEnter elements in array :\n ");
    for(i=0; i<n; i++)
    {
        printf("\nelement - %d:",i);
            scanf("%d",&a[i]);
    }
    
    for(i=0; i<n; i++)
    {
        if(a[i]!=-1)
        {
            for(j=i+1; j<n; j++)
            {
                if(a[i]==a[j])
                {
                    c++;
                    a[j]=-1;
                }
            }
         }      
    }
    printf("duplicate numbers in the  array: %d", c);
    return 0;
}

代码逐段说明

1. 变量定义与输入模块

  • 变量说明:
    • a[10]:存储用户输入的数组,最大支持10个元素
    • i/j:两层循环的遍历变量
    • n:存储用户输入的数组实际长度
    • c:重复元素计数器,初始值为0
  • 输入逻辑:先读取用户输入的数组长度n,再循环n次依次读取每个数组元素存入a数组。

2. 核心计数逻辑

这里默认约定用户输入的数组中不会出现-1作为有效值,用-1作为「已统计重复项」的标记:

  • 外层循环遍历数组的每个下标i:
    • 先判断a[i] != -1:如果当前元素已经被标记为-1,说明它是之前已经统计过的重复项,直接跳过即可
    • 如果当前元素未被标记,进入内层循环,从i的下一个下标j=i+1开始往后遍历所有元素
      • 只要发现a[i] == a[j],说明找到了一个和a[i]重复的元素:
        • 计数器c加1
        • 将a[j]赋值为-1,标记为已统计,后续外层循环遍历到j位置时就会直接跳过,不会重复计数

3. 结果输出

最终输出计数器c的值,就是数组中重复元素的总个数。

示例运行验证

假设输入数组为[2,3,2,4,3,2],运行流程如下:

  1. i=0,a[i]=2未被标记,内层遍历找到j=2、j=5两个和2相等的元素,c变为2,a[2]、a[5]被标记为-1
  2. i=1,a[i]=3未被标记,内层遍历找到j=4和3相等的元素,c变为3,a[4]被标记为-1
  3. 后续i=2、4、5位置的元素都是-1,直接跳过
  4. i=3位置的元素是4,后续没有相等元素,计数不变
    最终输出c=3,和实际重复元素个数一致。

注意事项

  • 代码默认数组中不存在-1这个有效输入,如果你的场景中-1是有效值,需要更换为其他不会出现的数值作为标记
  • 数组最大长度固定为10,如果输入n>10会出现数组越界错误
  • 此处统计的是「重复元素的总个数」,不是「有多少种重复的元素」,如果需要统计后者,只需要在内层循环找到第一个重复项时加1后直接break内层循环即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 16:24:02