在所有的输入的数里面找出具有最高频率而且频率相同的数

如题,比如输入1 1 1 1 2 2 2 2 3 3 3 4 4 4 4 4 4 5 5 5 ,那么输出的应该是1 2 ,因为他们出现的频率相同的情况下,出现的频率是最高的,附上代码

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 //简化一下 设置输入的文字的最大值为max
 6 #define max 99
 7 //这里定义输入数组的大小
 8 #define smax 99
 9 
10 void printsz(int *p,int size)
11 {
12     for (int i = 0;i < size;i++)
13     {
14         cout<<p[i]<<" ";
15     }
16 }
17 
18 void bubble_sort(int a[],int n)//n为数组a的元素个数
19 {
20     int i,j,temp;
21     for(j=0;j<n-1;j++)
22         for(i=0;i<n-1-j;i++)
23         {
24             if(a[i]>a[i+1])//数组元素大小按升序排列
25             {
26                 temp=a[i];
27                 a[i]=a[i+1];
28                 a[i+1]=temp;
29             }
30         }
31 }
32 
33 int main()
34 {
35     int cnt[max];//次数记录数组
36     int sz[smax];//
37     memset(cnt,0,max);
38     for (int i = 0;i < max;i++)cnt[i] = 0;
39 
40     for (i = 0;i<=smax; i++)
41     {
42         cin>>sz[i];
43         if(sz[i] == 0)break;//输入截止条件为0
44         cnt[sz[i]]++;
45     }
46     printsz(sz,smax);
47     cout<<endl;
48     printsz(cnt,max);
49     cout<<endl;
50 
51     //对cnt数组进行排序,但是不能破坏他的原有结构,故从新建立一个辅助数组
52     int cnt_1[max];
53     for (i = 0;i<max;i++)
54     {
55         cnt_1[i]=cnt[i];
56     }
57     printsz(cnt_1,max);
58     bubble_sort(cnt_1,max);
59 
60     int record = 0;//我们想要的频率
61     for (i = max-1;i >=1;i--)
62     {
63         if (cnt_1[i] == cnt_1[i-1])
64         {
65             record=cnt_1[i];
66             break;
67         }
68     }
69 
70     //现在遍历cnt数组,求出所有频率为record的num
71     cout<<endl;
72     for (int num = 0;num < max;num++)
73     {
74         if(record == 0)
75         {
76             cout<<"输入的数不含有指定条件的数"<<endl;
77             break;
78         }
79         if (cnt[num] == record)
80         {
81             cout<<num<<" ";
82         }
83     }
84     return 0;
85 }

这里我们假设了最大的值不超过99,现在假如去掉这个限制呢?可以使用下面的思路:

先对输入的数组sz排序,然后用结构体数组(由data和frequency组成),然后对结构体排序(由大到小),关键词为频率,然后遍历,找出第一组频率最高而且具有相同的频率的所有data,输出就行

原文地址:https://www.cnblogs.com/color-my-life/p/3683855.html