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


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

  • 相关阅读:
    MySQL性能优化(二):优化数据库的设计
    MySQL性能优化(一):优化方式
    PTA 07-图4 哈利·波特的考试 (25分)
    PTA 06-图3 六度空间 (30分)
    PTA 06-图2 Saving James Bond
    PTA 06-图1 列出连通集 (25分)
    PTA 05-树9 Huffman Codes (30分)
    PTA 05-树8 File Transfer (25分)
    PTA 05-树7 堆中的路径 (25分)
    PTA 04-树6 Complete Binary Search Tree (30分)
  • 原文地址:https://www.cnblogs.com/color-my-life/p/3683855.html
Copyright © 2020-2023  润新知