1 条题解
-
0
思路分析
1. 任务拆解:
- 读取小朋友数量n和要找的第k大的数
- 读取n个小朋友写的数字
- 通过k次循环找出第k大的数
- 每次找出当前最大值后将其标记为极小值
2. 关键点分析:
- 使用"标记排除法":每次找到当前最大值后,将其值设为极小值,使其在后续查找中不会被选中
- 第k大的数 = 进行k次找最大值操作后找到的那个数
- 第j次循环找到的就是第j大的数,当j=k时输出结果
- 这种方法通过物理排除已找到的数来简化问题
3. 步骤规划: 第一步:读取n和k 第二步:循环读取n个数字 第三步:进行k次循环,每次找出当前最大值 第四步:当j=k时,输出当前最大值(即第k大的数) 第五步:将当前最大值标记为极小值,排除后续查找
4. 代码对应:
cin>>n>>k:读取人数和k值- 第一个
for循环:输入n个数字 - 外层
for循环:进行k次查找(j从1到k) - 内层
for循环:找出当前最大值及其位置 if(j==k) cout<<a[maxi]:输出第k大的数a[maxi]=-999999:将当前最大值标记为极小值
- 1
信息
- ID
- 173
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 844
- 已通过
- 285
- 上传者