您的位置:首页 > 其它

FOJ--1705--众数问题

2009-07-24 17:29 281 查看
http://acm.fzu.edu.cn/problem.php?pid=1705

给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重集S中重数最大的元素称为众数。

例如,S={1,2,2,2,3,5}。

多重集S的众数是2,其重数为3。

现在给你一个已经排好序的集合S,让你求出其众数和重数。

输入数据 (请使用标准输入输出,而不要读写文件)

输入只有一行,有一个整数n(1<=n<=100)开始,表示集合S中元素个数,接下来有n个由一个空格隔开的整数(-100~100), 为集合S的元素,元素从小到大或者从大到小给出。

输出数据 (请使用标准输入输出,而不要读写文件)
输出一行二个整数X和Y,X表示众数和Y为重数,用一个空格隔开。如果存在多个解,只需输出值最小的众数即可。

样例输入与输出
样例1:
输入 输出
6 1 2 2 2 3 5 2 3

样例2:
输入 输出
3 -1 -1 -1 -1 3

分析: 我们主要是要把数值和他出现的次数记住,所以使用map容器的话会变得简单很多

代码如下:

#include <stdio.h>
#include <map>
using namespace std;
int main()
{
int n;
double x;
map<double,int> p;
while(scanf("%d",&n)!=EOF)
{
while (n--)
{
scanf("%lf",&x);
if(p.find(x)==p.end())   //判断是否存在
p[x]=1;		//没有则只出现一次
else
p[x]++;		//存在的话则再已有的基础上再加1
}
map<double,int>::iterator i,iend;
iend=p.end();
i=p.begin();
int max=(*i).second;  //max表示次数
int num=(*i).first;   //num表示数值
for(;i!=iend;i++)
{
if(max<(*i).second)
{
max=(*i).second;
num=(*i).first;
}
}
printf("%d %d/n",num,max);
p.clear();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: