众数问题
2017-05-25 19:08
155 查看
众数问题
所谓众数,就是对于给定的含有N个元素的多重集合,每个元素在S中出现次数最多的成为该元素的重数,多重集合S重的重数最大的元素成为众数。例如:S={1,2,2,2,3,5},则多重集S的众数是2,其重数为3。现在你的任务是:对于给定的由m个自然数组成的多重集S,计算出S的众数及其重数。
#include <stdio.h> #define N 100 int main() { int a[100]; int i,j; int n,temp; int max,count=1,x; printf("请输入集合元素个数N:\n"); scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n-1;i++){//冒泡排序 for(j=0;j<n-i-1;j++) { if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp;} } } for(i=0;i<n-1;i++)//众数 重数 { if(a[i]==a[i+1]) { count++; if(max<count) { x=a[i]; max=count; } } else count=1; } printf("该集合的众数为:%d,重数为:%d\n",x,max); return 0; } /* 思路: 输入集合元素后,首先进行排序,然后从排序后的元素进行判断比较,如果a[i]=a[i+1],计数count++,如果count比最大值max还要大, 则max=count,x记住此时的值a[i],循环到n-1结束。 */