• CSP认证考试(第九次)第一题


    试题编号:

    1

    试题名称:

    中间数

    时间限制:

    10.0s

    内存限制:

    512.0MB

    问题描述:

      在一个整数序列a1a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。
      给定一个整数序列,请找出这个整数序列的中间数的值。

    输入格式

      输入的第一行包含了一个整数n,表示整数序列中数的个数。
      第二行包含n个正整数,依次表示a1a2, …, an

    输出格式

      如果约定序列的中间数存在,则输出中间数的值,否则输出-1表示不存在中间数。

    样例输入

    6
    2 6 5 6 3 5

    样例输出

    5

    样例说明

      比5小的数有2个,比5大的数也有2个。

    样例输入

    4
    3 4 6 7

    样例输出

    -1

    样例说明

      在序列中的4个数都不满足中间数的定义。

    样例输入

    5
    3 4 6 6 7

    样例输出

    -1

    样例说明

      在序列中的5个数都不满足中间数的定义。

    评测用例规模与约定

      对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ ai ≤ 1000。

     

    自己的解题思路:

    使用vector存储数据,使用sort()排序,找出排序后的中间数(n/2位置处的数),使用count函数判断中间数等值的个数

    如果存在满足题意的中间数,需满足:

    例如:1 2 3 4...4 5 6 7 其中4为中间数,且4的个数可以为任意(>0) 大于4和小于4的个数相等,其和偶数。所以数据总数的奇偶和4的奇偶是一样的。也就是说数据总数的奇偶和中间数个数的奇偶是一样的。

     

    代码:

     1 #include<vector>
     2 #include<iostream>
     3 #include<algorithm>
     4 using namespace std;
     5 int main(){
     6     vector<int> array;
     7     int n;
     8     cin>>n;
     9     for(int i=0;i<n;i++){//输入数据
    10         int temp;
    11         cin>>temp;
    12         array.push_back(temp);
    13     }
    14     vector<int> temp;
    15     temp=array;
    16     sort(temp.begin(),temp.end());//排序
    17     //for(int i=0;i<temp.size();i++){
    18 //        cout<<temp[i]<<" ";
    19 //    }
    20     int num=0;
    21     num=count(temp.begin(),temp.end(),temp[n/2]);//判断中间数个数
    22     if(num%2==0&&n%2==0||n%2==1&&num%2==1){
    23         cout<<temp[n/2]<<endl;
    24     }
    25     else cout<<-1<<endl;
    26 }
  • 相关阅读:
    为什么利用多个域名来存储网站资源会更有效?
    事件绑定和普通事件的区别
    浏览器地址栏输入一个URL后回车,将会发生的事情
    JS数据类型及数据转换
    JS中的NaN和isNaN
    大数据的结构和特征
    系统重装后,如何重新找回hexo+github搭建的博客
    javascript操作符
    html头部
    html中链接的使用方法及介绍
  • 原文地址:https://www.cnblogs.com/Elaine-DWL/p/6430520.html
Copyright © 2020-2023  润新知