CCF201612-1 中间数

来源:互联网 发布:云南省软件行业协会 编辑:程序博客网 时间:2024/05/01 09:56
问题描述
  在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。
  给定一个整数序列,请找出这个整数序列的中间数的值。
输入格式
  输入的第一行包含了一个整数n,表示整数序列中数的个数。
  第二行包含n个正整数,依次表示a1, a2, …, 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。


我的分析:
       比较容易想到先排序,找到排序后的中间数,数出其左右各有多少数,若相等,则输出中间数,不等,则输出-1.
想法较简单,操作方法也较多。
map有自动进行排序的功能,做首先考虑。
此外,还有C++封装一些排序算法。

程序如下:
解法一(map容器):
#include <iostream>#include <map>using namespace std;int main(){    int n,v;    map<int, int> m;    map<int, int>::iterator it;    cin >> n;    for(int i=0; i<n; i++)    {         cin >> v;         m[v]++;    }    int mid = (n+1)/2;    int value, cont=0, left;    for(it=m.begin(); it!=m.end(); it++)    {        if(it->second+cont >= mid)        {            left = cont;            cont = 0;            value = it->first;        }        else        cont += it->second;    }    if(cont == left)        cout << value << endl;    else        cout << -1 << endl;}


解法二(sort):
#include <iostream>#include <algorithm>using namespace std;int main(){    int n, v;    int a[1005];    int i, left, right, mid, value;    cin >> n;    for(i=0; i<n; i++)    cin >> a[i];    sort(a, a+n);    //排序算法    mid = n/2;    left = mid;    right = n-mid-1;    for(i=mid-1; i>=0; i--)    {        if(a[i]==a[mid])        left--;        else            break;    }    for(i=mid+1; i<n; i++)    {        if(a[i]==a[mid])            right--;        else            break;    }    if(left == right)        cout << a[mid] << endl;    else        cout << -1 << endl;    return 0;}




原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三年级上册数学应用题 二年级下册数学应用题 四年级上册数学应用题 四年级上册数学应用题100道 五年级上册数学应用题 小学二年级数学应用题 二年级数学下册应用题大全 三年级下册数学应用题 小学六年级数学应用题 六年级下册数学应用题 七年级上册数学应用题 四年级鸡兔同笼应用题 五年级小数除法应用题 五年级下册数学应用题 三年级上期数学应用题 小学三年级时间应用题 小学二年级数学应用题大全 小学三年级数学应用题上册 六年级工程问题应用题 六年级数学比例应用题 六年级数学工程应用题 五年级鸡兔同笼应用题 10以内的加减法应用题 五年级上册小数除法应用题 小学二年级数学应用题上册 小学三年级上册数学应用题 二年级数学除法应用题 小学二年级除法应用题 二年级下册奥数应用题 七年级数学方程应用题 五年级数学方程应用题 小学数学四年级应用题 小学四年级上册数学应用题 六年级数学方程应用题 二年级上学期数学应用题 小学五年级上册应用题 五年级列方程解应用题 六年级数学分数乘法应用题 三年级上学期数学应用题 小学五年级奥数应用题 小学三年级上册应用题