如题,比如输入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,输出就行