作者:波纹飞鱼
T1318 第K名
题目
刚举行的万米长跑活动中,有N个人跑完了全程,所用的时间都不相同。颁奖时为了增加趣味性,随机抽了一个数K,要奖励第K名一双跑鞋。
现在组委会给你N个人的姓名、成绩(用时,单位是秒),请你编程快速输出第K名的姓名。
输入格式
第一行:2个整数N和K。
下面N行:每行第1个是字符串表示姓名;第2个是个整数,表示这个人跑完的使用时间。
输出格式
一行,第K名的姓名。
解题
一,流程图
二,提取关键点
1.输入名字与时间
2.按照时间重新排序
三,解决关键点
1.输入名字与时间
名字是字符串,使用string定义字符串数组储存。时间是数值,使用int定义数值数值储存。
2.按照时间重新排序
本篇博客使用冒泡排序,即依次比较相邻两个数值,若逆序则交换两个数值的位置。
注意:本题在交换数值位置的同时,需同时将数值所对应的字符串同时交换。
(具体基础排序算法请移步至大佬的课件文章)
编程
#include<iostream>
using namespace std;
int main()
{
string a[111],y;
int n,k,i,j,b[111],x;
cin>>n>>k;
for(i=0;i<n;i++){
cin>>a[i]>>b[i];
}
for(i=n-1;i>=1;i--)
for(j=0;j<i;j++)
if(b[j]>b[j+1]){
x=b[j];b[j]=b[j+1];b[j+1]=x;
y=a[j];a[j]=a[j+1];a[j+1]=y;
}
cout<<a[k-1];
return 0;
}