您现在的位置:小学生自学网>> 信息>> python辅导

信息学经典例题——谁考了第k名

作者: 来源: 发布时间:2020年09月18日 点击数:
 

【题目描述】

在一次考试中,每个学生的成绩都不相同,现知道了每个学生的学号和成绩,求考第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

程序代码 1(选择排序):


  1. #include <iostream>

  2. #include <cstring>

  3. #include <algorithm>

  4. using namespace std;

  5. int main()

  6. {

  7. double a[105];

  8. int num[105];

  9. int n,k;

  10. cin>>n>>k;

  11. for(int i=1;i<=n;i++) // 循环输入每人的学号及成绩

  12. {

  13. cin>>num[i]>>a[i];

  14. }

  15.  

  16. for(int i=1;i<n;i++) // 选择排序

  17. {

  18. for(int j=i+1;j<=n;j++)

  19. {

  20. if(a[i]<a[j])

  21. {

  22. swap(a[i],a[j]); // 交换成绩

  23. swap(num[i],num[j]); // 同时还要交换学号

  24. }

  25. }

  26. }

  27.  

  28. cout<<num[k]<<" "<<a[k]<<endl; // 输出第k名的学号和成绩

  29. return 0;

  30. }

 
 
程序代码 2(冒泡排序):

  1. #include <iostream>

  2. #include <cstdio>

  3. #include <cstring>

  4. #include <algorithm>

  5. using namespace std;

  6. int main()

  7. {

  8. double a[105];

  9. int num[105];

  10. int n,k;

  11. cin>>n>>k;

  12. for(int i=1;i<=n;i++) // 循环输入每人的学号及成绩

  13. {

  14. cin>>num[i]>>a[i];

  15. }

  16.  

  17. for(int i=n-1;i>=1;i--) // 冒泡排序

  18. {

  19. bool flag=true;

  20. for(int j=1;j<=i;j++)

  21. {

  22. if(a[j]<a[j+1])

  23. {

  24. flag=false;

  25. swap(a[j],a[j+1]); // 交换成绩

  26. swap(num[j],num[j+1]); // 同时还要交换学号

  27. }

  28. }

  29. if(flag) break; // 优化

  30. }

  31.  

  32. cout<<num[k]<<" "<<a[k]<<endl; // 输出第k名的学号和成绩

  33. return 0;

  34. }

 
 
 
程序代码 3(插入排序):

  1. #include <iostream>

  2. #include <cstring>

  3. #include <algorithm>

  4. using namespace std;

  5. int main()

  6. {

  7. double a[105];

  8. int num[105];

  9. int n,k;

  10. cin>>n>>k;

  11. for(int i=1;i<=n;i++) // 循环输入每人的学号及成绩

  12. {

  13. cin>>num[i]>>a[i];

  14. }

  15.  

  16. for(int i=2;i<=n;i++) // 插入排序

  17. {

  18. for(int j=i;j>1;j--)

  19. {

  20. if(a[j]>a[j-1])

  21. {

  22. swap(a[j],a[j-1]); // 交换成绩

  23. swap(num[j],num[j-1]); // 同时还要交换学号

  24. }

  25. }

  26. }

  27.  

  28. cout<<num[k]<<" "<<a[k]<<endl; // 输出第k名的学号和成绩

  29. return 0;

  30. }

 
程序代码 4(结构体):

  1. #include <iostream>

  2. #include <cstring>

  3. #include <algorithm>

  4. using namespace std;

  5.  

  6. struct student // 结构体

  7. {

  8. int num; // 学号

  9. double score; // 成绩

  10. }a[105];

  11.  

  12. bool cmp(student x,student y) // 比较函数

  13. {

  14. return x.score > y.score;

  15. }

  16.  

  17. int main()

  18. {

  19. int n,k;

  20. cin>>n>>k;

  21. for(int i=1;i<=n;i++) // 读入每人的学号及成绩

  22. {

  23. cin>>a[i].num>>a[i].score;

  24. }

  25. sort(a+1,a+n+1,cmp); // 调用sort 排序函数

  26.  

  27. cout<<a[k].num<<" "<<a[k].score<<endl; // 输出第k名学号及成绩

  28. return 0;

  29.  

  30. }

 
 
程序代码 5(函数 ):

  1. #include <iostream>

  2. #include <cstring>

  3. #include <algorithm>

  4. using namespace std;

  5. int n,k;

  6.  

  7. struct student // 结构体

  8. {

  9. int num; // 学号

  10. double score; // 成绩

  11. }a[105];

  12.  

  13. bool cmp(student x,student y) // 比较函数

  14. {

  15. return x.score > y.score;

  16. }

  17.  

  18. void init() // 输入函数

  19. {

  20. cin>>n>>k;

  21. for(int i=1;i<=n;i++)

  22. {

  23. cin>>a[i].num>>a[i].score;

  24. }

  25. }

  26.  

  27. void CMP() // 排序函数

  28. {

  29. sort(a+1,a+n+1,cmp);

  30. }

  31.  

  32. void print() // 输出函数

  33. {

  34. cout<<a[k].num<<" "<<a[k].score<<endl;

  35. }

  36.  

  37. int main()

  38. {

  39. init(); // 调用输入函数

  40. CMP(); // 调用排序函数

  41. print(); //调用输出函数

  42. return 0;

  43. }

 

 

上一篇:没有了!

下一篇:C语言的读入与输出