当前位置: 代码迷 >> C语言 >> 众数问题
  详细解决方案

众数问题

热度:92   发布时间:2007-11-20 14:50:20.0
众数问题
怎样把一堆数列中的众数找出来并打印啊,

要求用户先输入一个不是零的数字,再输入一个size,显示数组个数,但只能在1与100之间,比如输入10,随机生成10个数字,而这10个数字不能大于10. 然后找到众数,打印出来,如果有两个相同数量的众数,选第一个

想了好久都不知道怎么做,拜托各位大侠了
搜索更多相关的解决方案: 众数  

----------------解决方案--------------------------------------------------------
什么是众数?? 还有你的列子只有一个输入``不是有2个输入吗??


----------------解决方案--------------------------------------------------------
是中数吧!
----------------解决方案--------------------------------------------------------

众数就是在一堆数之中数量最多的那个.
----------------解决方案--------------------------------------------------------
简单啦,直接开个计数器数组,以下标作为原数组的元素值,而该数组的元素值即为一个计数器.
然后选择最大者,输出下标.
----------------解决方案--------------------------------------------------------
喔 是这样啊!
----------------解决方案--------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MIN 1 // 数字的最大值至少为1 (0无意义), 数字个数最小值
#define MAX 100 // 数字的最大值
#define ARRMAX 100 // 数字的最大个数


void arr_rand(int * p, int max, int size)
{
int i;
++max; // max = max + 1
for(i = 0; i < size; i++) //
p[i] = rand() % max; // 0 - max
}

void show(int * p, int size)
{
int i;
for(i = 0; i < size; i++)
{
printf("%3d ", p[i]);
if((i+1) % 8 == 0)
putchar('\n');
}
putchar('\n');
}

int plural(int * ar, int max, int size)
{
int i;
int t;
int plu;
++max;
int * p = (int *)malloc(sizeof(int *) * max); // 用于统计数字个数

for(i = 0; i < max; i++) // 初始化数组
p[i] = 0;
for(i = 0; i < size; i++) // 数字个数累积
p[ar[i]]++;
/* show(p, max); */
for(i = 0, t = 0; i < max; i++) // 取数组中最大数
if(p[i] > t)
{
t = p[i];
plu = i;
}
free(p);
return plu;
}


/******************* Main ********************/

int main(void)
{
int max;
int size;
int * p;
srand((unsigned int)time(NULL));

/* max 数字的范围 0 到 max */
/* size 是要生成的数字个数 */

while(scanf("%d %d", &max, &size) == 2
&& max >= MIN && max <= MAX
&& size >= MIN && size <= ARRMAX )
{
while(getchar() != '\n');

p = (int *)malloc(sizeof(int) * size);
arr_rand(p, max, size);
/* show(p, size); */
printf("%d\n", plural(p, max, size));
free(p);
}

puts("\nDone.");
return 0;
}

[此贴子已经被作者于2007-11-20 16:50:53编辑过]


----------------解决方案--------------------------------------------------------

#include<stdio.h>
#include<time.h>
#include <stdlib.h>
int main()
{
srand(time(NULL));
int i,n,Max=0,k=0;
int count[100]={0};
scanf("%d",&n);
for(i=0;i<n;i++)
{
count[rand()%(n+1)]++;
}
for(i=0;i<n;i++)
{
if(Max<count[i])
{
Max=count[i];
k=i;
}
}
printf("众数是%d\n",k);
return 0;
}

----------------解决方案--------------------------------------------------------

我的程序太复杂了,呵呵


----------------解决方案--------------------------------------------------------
  相关解决方案