正在载入在线练习界面,本页内容可直接阅读…

AK CSP › NOIP 提高 2010 第一轮真题 › 第 24 题

NOIP 提高 2010 第一轮 第 24 题:找 n 个数中第 m 大的元素

阅读程序 · 排序算法 · 答案 16

题目

```
#include<iostream>
using namespace std;
int main()
{
    const int SIZE=10;
    int data[SIZE],i,j,cnt,n,m;
    cin>>n>>m;
    for(i=1;i<=n;i++)
       cin>>data[i];
    for(i=1;i<=n;i++)
    {
        cnt=0;
        for(j=1;j<=n;j++)
            if( (data[i]<data[j]) || (data[j]==data[i] && j<i) )
                cnt++;
        if (cnt==m)
            cout<<data[i]<<endl;
    }
    return 0;
}
```
输入:  
5 2  
96 -8 0 16 87  
输出:_______

本小题

请写出程序的输出结果。

答案

16

题解

考点定位

本题考「名次统计模拟」,对应大纲 4.2.1 程序模拟(难度【2】)。

解题过程

cnt(i) = 比 data[i] 大的个数 + 相同且更早的个数 = 从大到小的名次。输入 5 2 / 96 −8 0 16 87:

值cnt
960
−84
03
162 ✓
871

cnt==m=2 的元素:16。

易错提醒

① 双重循环按「严格大于 + 同值早者」计名次,可处理重复元素;② 输出的是满足 cnt==m 的原值。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号