刚开始本来想用count[]数组来统计输入的数字作为下标的个数的,但是出现了段错误,数组太大了吧,不知道如何解决,大家可以帮忙看看。以下:
using namespace std;
#define int long long
#define endl '\n'
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
int count[1000000] = {0}; // 初始化数组,确保所有元素为0
int num;
for(int i = 0; i < n; ++i) {
cin >> num;
count[num]++; // 增加对应数字的计数
}
for(int i = 1; i <= 1e9; ++i) {//可能是这个范围太大了出现了段错误,但是修改了也存在段错误的问题
if(count[i] > n / 2.0) { // 如果某个数字的出现次数超过一半
cout << i << endl;
break;
}
}
return 0;
}
然后后面解决不了这个问题放弃了,看了大神的才知道原来可以用排序来解决,排序之后中间的就一定是。
using namespace std;
#define int long long
#define endl '\n'
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
int a[n];
for(int i = 0; i < n; ++i) {
cin >> a[i];
}
sort(a,a+n);
cout<<a[n/2]<<endl;//输出排序之后位于中间的位置
return 0;
}