求众数(C语言实现)

博客介绍了一种简单粗暴的C语言数组元素统计方法。定义数组b标记原数组元素是否已统计,初始元素全为1,若已统计则置为0;数组c统计元素出现位置,元素首次出现时c[i]加1,再次出现时再增加。还提及了代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        这里我采用的是比较简单粗暴的方法,定义了一个数组b,用来标记原数组里对应的数字是否已经统计了,b中的元素刚开始全部初始化为1,其长度与arr的长度一致,如果arr[i]已经统计,则将b[i]设置为0;数组c则是用来统计arr中每个元素出现的位置,当arr[i]中的元素第一次出现时,就将c[i]++,后序这个元素再次出现时,c[i]再进行++。下面是代码实现:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int Mode(int* arr, int arrSize)    //arrSize为数组arr的长度
{
    int b[arrSize];    //用来标记arr[i]是否已经统计过
    int c[arrSize];    //用来标记arr[i]出现的次数
    for (int i = 0; i < arrSize; i++)
        b[i] = 1;
    memset(&c, 0, sizeof(c));

    for (int i = 0; i < arrSize; i++)
    {
        if (b[i] == 0)    //表示当前arr[i]在之前已经统计过了,跳出此次循环,arr[i]与后面的元素进行比较,即不再统计arr[i]在之后出现的次数
            continue;

 /*遍历arr[i]之后的数组,将arr[i]与后面的元素相比较,统计arr[i]在整个数组中出现的次数*/       
for (int j = i; j < arrSize; j++)
        {
            if ((*(arr + i) == *(arr + j)) && (b[j] == 1))
            {
                c[i]++;
                b[j] = 0;    //将b[j]置为0,表示该位置的arr数组中的元素已经统计过了,后序不再统计
            }
        }
    }
    for (int i = 0; i < arrSize; i++)
        printf("%d\n", c[i]);
    int max = c[0];    //记录众数出现的频次
    int mode = arr[0];    //记录众数的值
    for (int i = 0; i < arrSize; i++)
    {
        if (c[i] > max)
        {
            max = c[i];
            mode = arr[i];
        }
    }
    return mode;

}

int main()
{
    int a[] = { 2, 1, 2, 2, 4, 5, 1 };
    int size = sizeof(a) / sizeof(int);    //计算数组a的长度
    printf("size = %d\n",size);
    int x = Mode(a, size);
    printf("mode = %d", x);
    return 0;
}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值