CCF201312(1)出现次数最多的数

来源:互联网 发布:淘宝怎样增加流量 编辑:程序博客网 时间:2024/04/28 07:33

There are two solutions for this problem.

First:
#include<stdio.h>//算法存在冗余计算量//数值相同的两个或多个的出现次数都计算了,只不过是逐次-1//因此没有影响最后计算结果 //用链表或者统计标记的方法解都很好 //将数组中出现过的数排成队列或标记 //节省计算量 int main(){int n;int m[10000];scanf("%d",&n);int i,j;int min=32000;//int -32768~32767记录出现次数最多的最小数 int maxnum=0;//记录出现的最大次数 int book[10000]={0};//记录每个元素出现的次数 for(i=0;i<n;i++)book[i]=1;for(i=0;i<n;i++)scanf("%d",&m[i]);for(i=0;i<n;i++)for(j=i+1;j<n;j++){if(m[i]==m[j])book[i]++;}for(i=0;i<n;i++){if(book[i]>maxnum){   min=m[i];   maxnum=book[i];}else if(book[i]==maxnum){if(m[i]<min)min=m[i];}}printf("%d",min);return 0;}

Second:
#include<stdio.h>int main(){int n;scanf("%d",&n);int book[10001]={0};int data[10001]={0};int i,j,min,time;int count=0;int a;for(i=0;i<n;i++){scanf("%d",&a);if(book[a]==0){data[count]=a;count++;book[a]++;}elsebook[a]++;}min=data[0];time=book[min];for(j=1;j<count;j++){if(book[data[j]]==time){min=(data[j]<min)?data[j]:min;}else if(book[data[j]]>time){min=data[j];time=book[data[j]];}else  continue;}printf("%d",min);return 0;}


Good Luck to myself !



0 0
原创粉丝点击