新手 ,请教,求是个数字中出现频率最高的数
输入十个数字,找出出现次数最多的数,如果多个并列,则按数字出现顺序分别输出。
例如:
输入 1 5 27 33 24 1 27 18 19 20
输出 1 27
[解决办法]
笨方法 你可以一试。。~
存储每个数出现的个数。。
#define max_size 10
void main()
{
int a[max_size],b[max_size],num;
int i,j;
memset(b,0,sizeof(b));
for(i=0;i<max_size;i++)
cin>>a[i];
for(i=0;i<max_size;i++)
for(j=i;j<max_size;j++)
{
if(a[j]==a[i]) b[i]++;
}
num=0;
for(i=0;i<max_size;i++)
{
if(b[i]<b[num]) continue;
else num=i;
}
for(i=0;i<=num;i++)
{
if(b[i]==b[num])
cout<<a[i]<<" ";
}
[解决办法]
#include <stdio.h>
#include <stdlib.h>
#defineINVALID_NUM(-1)
#defineMAX_NUM_SIZE10
typedef struct _MAP_ITEM
{
intcnt;
intnum;
}MAP_ITEM;
int g_max_cnt = 0;
void InitMap(MAP_ITEM array[], int size)
{
int i;
for (i = 0; i < size; i++)
{
array[i].num = INVALID_NUM;
array[i].cnt = 0;
}
}
void SetValueEx(MAP_ITEM array[], int size, int num)
{
int index = num % size;
while (array[index].num != num && INVALID_NUM != array[index].num)
{
index++;
}
if (index > size - 1)
{
return;
}
array[index].num = num;
array[index].cnt++;
if (array[index].cnt > g_max_cnt)
{
g_max_cnt = array[index].cnt;
}
}
void SetValue(MAP_ITEM array[], int size)
{
int i, temp;
for (i = 0; i < size; i++)
{
temp = rand() % 20;
printf("%d ", temp);
SetValueEx(array, size, temp);
}
printf("\n");
}
void PrintMax(MAP_ITEM array[], int size)
{
int i;
for (i = 0; i < size; i++)
{
if (g_max_cnt == array[i].cnt)
{
printf("%d\n", array[i].num);
}
}
}
int main(int argc, char **argv)
{
MAP_ITEM arr[MAX_NUM_SIZE];
InitMap(arr, MAX_NUM_SIZE);
SetValue(arr,MAX_NUM_SIZE);
PrintMax(arr, MAX_NUM_SIZE);
return 0;
}