首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手 ,请问,求是个数字中出现频率最高的数

2013-03-12 
新手 ,请教,求是个数字中出现频率最高的数输入十个数字,找出出现次数最多的数,如果多个并列,则按数字出现

新手 ,请教,求是个数字中出现频率最高的数
输入十个数字,找出出现次数最多的数,如果多个并列,则按数字出现顺序分别输出。
例如:
输入 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;
}

热点排行