标题:众数问题
只看楼主
alicefioan37
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-9-29
 问题点数:0 回复次数:8 
众数问题
怎样把一堆数列中的众数找出来并打印啊,

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

想了好久都不知道怎么做,拜托各位大侠了
搜索更多相关主题的帖子: 众数 
2007-11-20 14:50
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
得分:0 
什么是众数?? 还有你的列子只有一个输入``不是有2个输入吗??


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-11-20 14:59
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
是中数吧!

—>〉Sun〈<—
2007-11-20 15:38
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

众数就是在一堆数之中数量最多的那个.

倚天照海花无数,流水高山心自知。
2007-11-20 15:43
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
简单啦,直接开个计数器数组,以下标作为原数组的元素值,而该数组的元素值即为一个计数器.
然后选择最大者,输出下标.

倚天照海花无数,流水高山心自知。
2007-11-20 15:44
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 
喔 是这样啊!

—>〉Sun〈<—
2007-11-20 15:47
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 

#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编辑过]


—>〉Sun〈<—
2007-11-20 16:44
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

#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;
}

倚天照海花无数,流水高山心自知。
2007-11-20 16:51
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
得分:0 

我的程序太复杂了,呵呵


—>〉Sun〈<—
2007-11-20 16:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-187328-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.605732 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved