题目
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。例如,S={1,2,2,2,3,5}。多重集S的众数是2,其重数为3。 对于给定的由n 个自然数组成的多重集S,设计算法给出S的众数及其重数。如果出现多个众数,请输出最大的那个。
时间复杂度
其中运行的基础循环次数都为有限次数,所以时间复杂度应该为$O(C)$
全部代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| #include <stdio.h>
int main() { int s[7] = {1, 2, 2, 2, 3, 3, 5}; int z[20][2] = {0}; int i, j, a, b, flag,max; flag = 0; max = 0;
for (i = 0; i < 7; i++) { a = s[i]; b = 0; if (i > 0 && s[i] == s[i - 1]) continue; else { for (j = i; j < (7); j++) { if (a == s[j]) b++; else continue; } } if (b <= 1) continue; else { for (flag; flag < 20;) { z[flag][0] = a; z[flag][1] = b; flag++; break; } } } for ( i=0; i < 20; i++) { if(flag>1 && flag!=0) { if (z[max][1]<z[flag][1]) max = flag; else if(z[max][1]==z[flag][1]){ if (z[max][0]<z[flag][0]) max=flag; else continue; } else continue; } else if(flag == 0) printf("该集合没有众数。"); else printf("这个数组的众数是%d,它的重数为%d",z[0][0],z[0][1]); } printf("该数组的众数是%d,它的重数为%d",z[max][0],z[max][1]); return 0; }
|