解题思路:
首先,定义结构体数组S,其中的元素不仅有值,还有该值在S中出现的次数。对于输入的每个自然数s,若其值在S中出现过,就令其出现的次数加1,若出现的次数比已知最大的重数多,就更新当前最大的重数;若s是新值,就以出现次数为1的状态添加到S中,使S中元素的个数加1;如此更新或添加,直到输入结束,找到众数的重数。
注意事项:
当有多个众数时,不仅要得到它出现的重数,而且要在集合S中寻找最小的众数。
参考代码:
#include<stdio.h> #define N 50001 typedef struct SNum{ int s; //元素的值 int t; //元素在多重集合中出现的次数 }Num; Num S[N]; int main(){ int n,s,i,v,m=0,c=0; scanf("%d",&n); while(n--){ //n行中 scanf("%d",&s); //每行一个自然数 for(i=0;i<c;i++){ //寻找集合S if(s==S[i].s){ //若s在集合S中出现过 S[i].t++; //出现的次数加1 if(S[i].t>m) //若出现次数最多 m=S[i].t; //更新众数的重数 break; } } if(i==c){ //若s在集合S中还未出现过 S[c].s=s; //将s添加到S中 S[c].t=1; //出现了1次 c++; //集合S中有c个元素 } } v=0x7fffffff; for(i=0;i<c;i++){ //在集合S中寻找 if(S[i].t==m&&S[i].s<v) //最小的众数 v=S[i].s; } printf("%d\n%d\n",v,m); return 0; }
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:645 |
文科生的悲哀 (C语言代码)浏览:1538 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:750 |
简单的a+b (C语言代码)浏览:529 |
1035 题解浏览:875 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:672 |
C二级辅导-同因查找 (C语言代码)浏览:618 |
简单的a+b (C语言代码)浏览:600 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:529 |
1231题解(注意理解“输入多个测试实例”)浏览:830 |