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容器的话会变得简单很多
代码如下:
给定含有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; }