时间限制: 1000 ms 内存限制: 65536 KB
提交数: 26720 通过数: 12316【题目描述】
给出一个含有n(0 < n <= 1000)个整数的数组,请找出其中出现次数超过一半的数。数组中的数大于-50且小于50。
【输入】
第一行包含一个整数n,表示数组大小;
第二行包含n个整数,分别是数组中的每个元素,相邻两个元素之间用单个空格隔开。
【输出】
如果存在这样的数,输出这个数;否则输出no。
【输入样例】
3 1 2 2
【输出样例】
2
信息学奥赛学习资料
链接:https://pan.baidu.com/s/1IBH3uj7OdE6gx16RYxZCtw?pwd=ip6d
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; int main() { int n; cin>>n; int a[n],f[101]={};//根据取值范围定义101数组 for(int i=0;i<n;i++) { cin>>a[i];//输入数值 f[a[i]+50]++;//桶排序的精髓,对应数的桶里个数加1。这里有一个细节,就是我加了50,因为每个数的数据范围在-50到50之间,但是整型数组是没有负数号的,所以我加50存下来 } for(int i=0;i<n;i++) { if(f[a[i]+50]>n/2)//如果这个数超过一半,则输出,并结束 { cout<<a[i]; return 0; } } cout<<"no";//如果没有结束,就输出“no” return 0; }
标签:信息学,数组,输出,1186,50,int,奥赛,include From: https://www.cnblogs.com/sd129/p/16652644.html