C语言 寻找数据中的众数

室友畅的c语言作业。
基本思路:a[]用来存放数据,b[]用来存放a[]中每个数据的出现次数,注意当一个数据出现多次是,只有第一次出现时对应的b[]是次数,剩下的都是1。这样减少判断次数。NUM记录众数的出现次数,FLAG记录众数的出现位置。考虑到多个众数的情况,引入c[],记录与众数出现次数相同的次数的数据。
源代码如下:

#include<stdio.h>
#define N 8

int a[N+1],b[N+1],c[N+1];
int i,j;
int NUM,FLAG;
int main()
{
    for (i = 0; i < N; i++)
        b[i] = 0;
    printf("Please input a array.\n");
    for (i = 0; i < N; i++)
        scanf_s("%d",&a[i]);
    for (i = 0; i < N; i++)
    {
        for (j = i; j < N; j++)
            if (a[i] == a[j])
                b[i]++;
    }
    NUM = b[0];
    for (i = 0; i < N; i++)
    {   
        if (NUM <= b[i])
        {
            NUM = b[i];
            FLAG = i;
        }
    }
    for (i = 0; i < N; i++)
        c[i] = 0;
    c[FLAG] = a[FLAG];
    for (i = 0; i < N; i++)
    {
        if (NUM == b[i])
            c[i] = a[i];
    }
    printf("Mode is:");
    for (i = 0; i < N; i++)
        if (c[i]!=0)
        printf("%d&",c[i]);
    printf("\b \n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/twentyonepilots/article/details/79857034