正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 提高 2010 第一轮真题 › 第 24 题
NOIP 提高 2010 第一轮 第 24 题:找 n 个数中第 m 大的元素
题目
```
#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 |
|---|---|
| 96 | 0 |
| −8 | 4 |
| 0 | 3 |
| 16 | 2 ✓ |
| 87 | 1 |
cnt==m=2 的元素:16。
易错提醒
① 双重循环按「严格大于 + 同值早者」计名次,可处理重复元素;② 输出的是满足 cnt==m 的原值。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号