【CCFCSP】201612-1 中间数

试题编号: 201612-1
试题名称: 中间数
时间限制: 1.0s
内存限制: 256.0MB

根据题意,“中间数”的性质是比它大的数的数量等于比它小的数的数量。所以可以先对这个数组排序,然后遍历数组,求出比每个数大的数的数量和比它小的数的数量。再遍历一遍求出中间数。
以下的代码中用到了STL中的sort函数对数组进行排序。(需要包含algorithm头文件)

int a[1010], small[1010],big[1010];
//small[i]保存比a[i]小的数的个数
//big[i]保存比a[i]大的数的个数
int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i];
    sort(a+1, a + n+1);//先对数组进行排序
    a[n + 1] = a[n];
    a[0] = a[1];
    for (int i = 1; i <= n; i++) {
        if (a[i] > a[i - 1])
            small[i] = i - 1;
        else
            small[i] = small[i-1];
    }
    for (int i = n; i > 0; i--) {
        if (a[i] < a[i + 1])
            big[i] = n-i;
        else
            big[i] = big[i + 1];
    }
    int ans = -1;
    for (int i = 1; i <= n; i++)
        if (small[i] == big[i])
            ans = a[i];
    cout << ans << endl;
}

你可能感兴趣的:(CCFCSP)