超半的数https://ac.nowcoder.com/acm/problem/22222
题目描述
给你n个数,有一个数的出现次数超过一半,请找出这个数。
输入描述:
输入两行。 第一行包含一个整数n 第二行包含n个整数ai 1e91≤n≤1000,1≤ai≤1e9
输出描述:
输出一行,包含一个整数。
输入 复制
5 1 2 2 3 2
输出 复制
2
其实这题也没啥好说的,看一下思路:
1.升序排序!!(用sort函数)这样好去判断下面写的内容
2.判断如果该数和该数的下一个数不相等,那么计数器c=1(因为至少有一个,所以c=1)
否则c++。
3.最后判断如果找到了有一个数出现的次数>总数/2的(题目的要求),那么直接输出这个数,又因为要找第一次出现的,所以exit(0)。
思路就这样,看代码:
#include <bits/stdc++.h>
using namespace std;
int n,a[1010],x,c=1,t;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n;i++){
if(a[i]!=a[i+1]) c=1;
else c++;
if(c>n/2){
cout<<a[i];
exit(0);
}
}
return 0;
}