c语言统计数组中频率最高的数

任意读入10个整数存放到数组a中,统计数组中出现频率最高的数,输出该数及其出现次数。

如果数组中没有重复出现的数,则输出"没有重复出现的数";

如果有多个频率最好的数字,按照输入的先后顺序全部输出,参考下面的程序运行示例。

解题要求

输入10个整数到a数组中,按题目要求统计完成后,先将a数组中数据全部输出(每个数后隔一空格),并将出现频率最高的数及其出现次数输出。格式如下:

数组a中出现频率最高的数是X,出现次数为X

解答如下

img

#include <stdio.h>
int Count_x(int t[],int size,int x)
{
    int count=0;
    for(int p=0;p<size;p++)
    {
        if(t[p]==x)
        {
            count++;
        }
    }
    return count;
}
int main()
{
    int n=10;
    int a[10];
    int H[n];
    int fla=0;
    printf("输入10个整数:"); 
    for(int p=0;p<n ;p++ )
    {
        scanf("%d",&a[p]);
    }
    printf("a数组:");
    for(int p=0;p<n ;p++)
    {
        printf("%d ",a[p]);
        H[p]=Count_x(a,n,a[p]); 
        if(H[p]>1) fla++;
    }
    printf("\n");
    if(fla==0)
    {
        printf("没有重复出现的数\n");
    }
    else
    {
        int maxH=H[0],maxp=0;
        for(int p=1;p<n ;p++ )
        {
            if(H[p]>maxH)
            {
                maxH=H[p];
                maxp=p;
            }
        }
        int flag[n];
        int count_flag=0;
        for(int p=0;p<n ;p++ )
        {
            int out=1;
            for(int q=0;q<count_flag;q++)
            {
                if(flag[q]==a[p]) 
                {
                    out=0;
                    break;
                }
            }
            if(H[p]==maxH&&out)
            {
                printf("数组a中出现频率最高的数是%d,出现次数为%d\n",a[p],H[p]);
                flag[count_flag++]=a[p];
            }
        }
    }
    return 0;
}

#include <iostream>

#define N1 1000
int b[N1] = { 0 };
int max;
int index = 0;
int i, j, n;
void top(int a[], int size, int N)
{
    for (i = 0; i < size; i++)
    {
        for (j = 0; j < size; j++)
        {
            if (a[i] == a[j])
            {
                b[i]++;
            }
        }
    }
    for (int i = 0; i < N; i++)
    {
        max = b[0];
        index = 0;
        for (j = 1; j < size; j++)
        {
            if (max < b[j])
            {
                max = b[j];
                index = j;
            }
        }
        printf("%d,%d\n", a[index], max);
        for (j = 0; j < size; j++)
        {
            if (max == b[j])
            {
                b[j] = 0;
            }
        }
    }
}
int main()
{
    int N = 2;
    int a[N1] = { 6,3,3,6,6,-2,3,7,3 };
    top(a, 9, N);
    return 0;
}

思路:先用for循环遍历数组,采用map的思路,每一个数组元素对应的数组b[],对应a[]相应位置,记录元素在数组a其他位置出现的次数,for循环结束就得到类似于map的一一对应于a的数组b,数组b记录的为数组a中元素出现的元素次数。第二步的思路是当遍历完频率最高的元素次数及元素值,就再用一个for循环置零数组b,然后继续遍历频率次之的元素。

#include <stdio.h>  
   
int main() 
{  
    int inputArray[100], countArray[100];  
    int elementCount, i, j, count;  
   
    printf("Enter Number of Elements in Array\n");
    scanf("%d", &elementCount);
    printf("Enter %d numbers\n", elementCount);
     
    /* Read array elements */
    for(i = 0; i < elementCount; i++) {
        scanf("%d", &inputArray[i]);
        countArray[i] = -1;
    }
   
    /* 
     * for any element inputArray[i], If countArray[i] = -1, 
     * that means frequency is not counted for this number yet 
     * and countArray[i] = 0 means frequency is already 
     * counted for this number.
     */ 
    for(i = 0; i < elementCount; i++) {  
        //开始统计inputArray[i]这个元素的出现频率
        //至少出现1次
        count = 1;  
 
        // 值为0表示该数字已经被统计过
        if (countArray[i] == 0) {continue;} 
        for(j = i+1; j < elementCount; j++) {  
            if(inputArray[i]==inputArray[j]) {
                countArray[j] = 0;    
                count++;
            }  
        }  
        //记录inputArray[i]出现的频率
        countArray[i] = count;
    }  
 
    /* Print count of each element */   
    for(i = 0; i<elementCount; i++) {  
        if(countArray[i] != 0) {  
            printf("Element %d : Count %d\n", inputArray[i], countArray[i]);  
        }  
    }  
   
    return 0;  
}  

参考一下呢

C语言-记录数组中各元素出现的频率,并找出频率最高的元素_ghdzz的博客-CSDN博客_c语言查询输出频率最高多少 此程序多用于滤波程序思路:查找数组中最高频的值分两步:1、记录数组A中各个元素的出现次数2、找出次数最高的那个元素先看第一步,记录数组A中各个元素的出现次数。先另外新建一个用于记录频率的数组B,初始化为全0。然后对数组A的各个元素的值,都在数组B的对应元素的值上加1,例如A[0]=2,那么B[2]的值就+1,A[1]的值还是2,那么B[2]的值就又+1。如此,把数组A循环后,就可以得到数组A中各个元素在数组中出现的次数。假如扫描完成后,B[5]==3,那么意味着数字5出现了3次。第二 https://blog.csdn.net/ghdzz/article/details/122389780

参考一下

C语言 -- 计算一个数组中每个元素出现的频率_飞雪照日的博客-CSDN博客_c语言统计数组元素出现次数 1. 问题描述:假设有个整型数组inputArray,共有N个元素。我们要统计每个元素出现的频率。2. 分析:这个问题的难点在于保存每个元素的当前频率值。比如元素1,当前出现1次了,怎么保存这个状态,解决了这个问题后,再遇到1就更新这个状态就好了,其它元素也是一样的道理。如果用Java来解决这个问题会很简单,因为Java丰富的容器类为我们提供了上面问题的解决方案,HashMap https://blog.csdn.net/lx1848/article/details/52817802?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166933802716800213031721%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166933802716800213031721&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-52817802-null-null.nonecase&utm_term=c%E8%AF%AD%E8%A8%80%E7%BB%9F%E8%AE%A1%E6%95%B0%E7%BB%84%E4%B8%AD%E9%A2%91%E7%8E%87%E6%9C%80%E9%AB%98%E7%9A%84%E6%95%B0&spm=1018.2226.3001.4450