编程实现:主要成分

信息学奥赛   2023-05-31 00:59   195   0  

编程实现:主要成分

【背景信息】

金星是离地球最近的行星,人类发射的“金星快车”探测器的主要任务是对金星大气层进行精确的探测,分析其化学成分。

【题目描述】

从金星探测器传回来一组测量数据,这是一个长度为N1N1000000)的整数数列,数列中的每个整数代表某一种化学成分(相同的整数代表相同的化学成分)。

主要成分:指在包含的所有化学成分中比例超过一半(N÷2的结果向下取整)的成分。

现在要判断其是否有主要成分;如果有,其主要成分是哪一种?

例如:

N=7,整数数列为1 2 3 2 2 1 2,其中成分24个,超过了7的一半(7的一半向下取整为3),所以主要成分是2

N=6,整数数列为1 102 31 31 1 102,其中的每一种成分都只有2个,未超过6的一半(6的一半为3),所以没有主要成分。

【输入描述】

第一行输入一个正整数N1N1000000),表示数列长度

第二行输入N个整数(1≤整数≤2×109),每个整数表示一种化学成分,两个整数之间用一个空格隔开

【输出描述】

输出一行,如果存在主要成分,则输出代表主要成分的整数,否则,输出No

【样例输入】

7

1 2 3 2 2 1 2

【样例输出】

2

参考答案:

#include<bits/stdc++.h>
using namespace std;
int a[1000000+5],n; 
int ma=0;
int main(){
  cin>>n;
  for(int i=1;i<=n;i++){
    cin>>a[i];
  }
  sort(a+1,a+n+1);
  int g=0,num=a[1];
  for(int i=1;i<=n;i++){
    g++;
    if(i==n||a[i]!=a[i+1]){
      if(g>ma){
        ma=g;
        num=a[i];
      }
      g=0;//赋值为0 
    }
  }
  if(ma>n/2){
    cout<<num;
  }else{
    cout<<"No";
  }
  return 0;
}