1176:谁考了第k名
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第k名学生的学号和成绩。
【输入】
第一行有两个整数,分别是学生的人数n(1≤n≤100),和求第k名学生的k(1≤k≤n)。
其后有n行数据,每行包括一个学号(整数)和一个成绩(浮点数),中间用一个空格分隔。
【输出】
输出第k名学生的学号和成绩,中间用空格分隔。(注:请用%g输出成绩)
【输入样例】
5 3
90788001 67.8
90788002 90.3
90788003 61
90788004 68.4
90788005 73.9
【输出样例】
90788004 68.4
【来源】
No
1. #include <iostream> 2. #include <string> 3. using namespace std; 4. struct student{ 5. string id; 6. double score; 7. }; 8. student a[101]; 9. bool cmp(student &a,student &b){ 10. return a.score<b.score; 11. } 12. void swap(student &a,student &b){ 13. student t; 14. t.id= a.id,t.score = a.score; 15. a.id= b.id,a.score = b.score; 16. b.id=t.id,b.score=t.score; 17. } 18. void sort(int s,int e){ 19. for(int i=s;i<=e-1;i++) 20. for(int j=i+1;j<=e;j++) 21. if(cmp(a[i],a[j])) swap(a[i],a[j]); 22. } 23. int main(int argc, char *argv[]) 24. { 25. int n,k; 26. cin>>n>>k; 27. for(int i=0;i<n;i++) 28. cin>>a[i].id>>a[i].score; 29. ::sort(0,n-1); 30. cout<<a[k-1].id<<" "<<a[k-1].score<<endl; 31. return 0; 32. }