要求用户先输入一个不是零的数字,再输入一个size,显示数组个数,但只能在1与100之间,比如输入10,随机生成10个数字,而这10个数字不能大于10. 然后找到众数,打印出来,如果有两个相同数量的众数,选第一个
想了好久都不知道怎么做,拜托各位大侠了
#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编辑过]