- 郑俊城 的博客
一段排位赛第二场(第四题)题解
- 2022-5-9 20:20:17 @
题目链接:P6882
这题是作业实锤了,但是比赛时我差点把计数思想忘记了,2分20秒至少有30秒在想方法。。。
好啦,言归正传,现在开始讲方法——
1、创建一个105的数组,因为C++不能有负数的下标,不像python,负数下标还能检测倒数第几的,所以根据题目的数据来看,我们还要把数加上50才能放进数组里,让其出现次数增加1。
2、遍历数组,只要一个元素出现次数超过总数的一半之后,便立刻输出它减50后的值,然后结束程序。
3、如果遍历完毕仍然没结束的话,输出no。
考点:
1、计数思想
2、遍历数组的能力
3、循环与条件
代码:
#include<bits/stdc++.h>
using namespace std;
// 变量特别是数组尽量要定义在函数外
int a[105], num, n;
int main(){
cin >> n;
for(int i = 0;i < n;i++){
cin >> num;
// 加上50后数组值递增
a[num + 50]++;
}
// 遍历数组,查找元素,判断条件
for(int i = 0;i < 105;i++){
if(a[i] > (n / 2)){
cout << (i - 50);
return 0;
}
}
cout << "no";
return 0;
}