求众数问题算法的思路(用递归与分治策略)
发布网友
发布时间:2022-04-18 22:12
我来回答
共2个回答
热心网友
时间:2022-04-18 23:41
题目要求输入若干不超过100的非负整数,输出众位数,若有多个,从小到大输出。
#include <stdlib.h>
#include <string.h>
int main()
{
int n;
scanf("%d",&n);
int i,j,a[100],m,max=0;
memset(a,0,sizeof(a));
for(i=0;i<n;i++)
{
scanf("%d",&m);
a[m]++; //这是程序的巧妙之处,利用数组的下标作为出现数字的保存,而且避免了相同数字的重复记录。
}
for(i=0;i<100;i++)
for(j=0;j<100;j++)
{
if(a[i]>a[j]&&a[i]>max) //利用变量储存最大数,想了挺久才想出加上a[i]>max的条件。
max=a[i];
}
for(i=0;i<100;i++)
if(a[i]==max)
printf("%d ",i);
return 0;
}
热心网友
时间:2022-04-19 00:59
不用递归可以吗?我想先排个序,然后相同的数字一定会在一起的,然后数一数哪一种数是最多的就行了,我以前写过.递归分治好像没什么优势吧