厦大C语言上机 1486 第K高的人
2018-01-13 13:21
603 查看
1486.第K高的人
时间限制: 1000 MS 内存限制: 65536 K
提交数: 597 (1 users) 通过数: 288 (283 users)
问题描述
对于男生来说,身高是一个比较“严肃”的话题:谁都希望自己能长高一点。很不幸,小明连170cm的门槛都没能迈进。也不知道小明从哪弄来一份全院男生的资料,不过小明最关心的还是身高!现在小明想从全院n个男生中找出第k高的男生的身高是多少,不过由于信息学院人口众多,小明想尽可能用快的方法找到他想知道的第k高的身高!
输入格式
第一行输入总男生人数n和需查询的第k高的身高(0<k<=n<100,50<n<100)
第二行输入n个身高值[150,250],保证n个身高值互不相同。
输出格式
输出第k高的身高值。
样例输入
10 6
160 175 180 165 170 171 169 185 172 168
样例输出
170
来源
xmu
时间限制: 1000 MS 内存限制: 65536 K
提交数: 597 (1 users) 通过数: 288 (283 users)
问题描述
对于男生来说,身高是一个比较“严肃”的话题:谁都希望自己能长高一点。很不幸,小明连170cm的门槛都没能迈进。也不知道小明从哪弄来一份全院男生的资料,不过小明最关心的还是身高!现在小明想从全院n个男生中找出第k高的男生的身高是多少,不过由于信息学院人口众多,小明想尽可能用快的方法找到他想知道的第k高的身高!
输入格式
第一行输入总男生人数n和需查询的第k高的身高(0<k<=n<100,50<n<100)
第二行输入n个身高值[150,250],保证n个身高值互不相同。
输出格式
输出第k高的身高值。
样例输入
10 6
160 175 180 165 170 171 169 185 172 168
样例输出
170
来源
xmu
#include <stdio.h> int partition(int *a, int low, int high) { int mid = (low + high) / 2; a[0] = a[mid]; a[mid] = a[low]; while (low < high) { while (low < high && a[high] <= a[0]) --high; a[low] = a[high]; while (low < high && a[low] >= a[0]) ++low; a[high] = a[low]; } a[low] = a[0]; return low; } int k_most(int *a, int low, int high, int k) { int pivot = partition(a, low, high); if (pivot == k) return a[pivot]; else if (pivot < k) return k_most(a, pivot+1, high, k); else return k_most(a, low, pivot-1, k); } int main() { int n, k; int array[105] = { 0 }; int i; scanf("%d %d", &n, &k); for (i = 1; i <= n; ++i) scanf("%d", &array[i]); printf("%d\n", k_most(array, 1, n, k)); return 0; }
相关文章推荐
- 厦大C语言上机 1402 第K早之日
- 厦大C语言上机 1358 小明的考题3――必杀技
- 厦大C语言上机 1370 谁是下一个十佳歌手
- 厦大C语言上机 1378 寻书之旅2
- 厦大C语言上机 1483 归一法则
- 厦大C语言上机 1504 整数编号
- 厦大C语言上机 1359 四则运算器
- 厦大C语言上机 1371 九九乘法表
- 厦大C语言上机 1379 合并队伍
- 厦大C语言上机 1484 成绩统计
- 厦大C语言上机 1361 分数约简
- 厦大C语言上机 1372 奇偶求和计算
- 厦大C语言上机 1381 不重叠子串数
- 厦大C语言上机 1485 成绩排序
- 厦大C语言上机 1363 简单的数列求和
- 厦大C语言上机 1374 进制转换
- 厦大C语言上机 1382 小明的生词本
- 厦大C语言上机 1497 简单编辑
- 厦大C语言上机 1389 简单的统计
- 厦大C语言上机 1377 寻书之旅1