输入学生的人数,然后再输入每位学生的分数和姓名,求获得最高分的学生的姓名。
【输入】
第一行输入一个正整数N(N <= 100),表示学生人数。接着输入N行,每行格式如下:
分数 姓名
【输出】
获得最高分数同学的姓名。
注意:
分数是一个非负整数,且小于等于100;
姓名为一个连续的字符串,中间没有空格,长度不超过20。
数据保证最高分只有一位同学。
【样例输入】
5
87 lilei
99 hanmeimei
97 lily
96 lucy
77 jim
【样例输出】
hanmeimei
第一版代码(输出结果不正确):
#include <iostream>
#include <cstdio>
using namespace std;
struct student
{
int score;
string name;
};
student a[1000]; //定义结构体
int main()
{
int i,j,n,temp,max=0;
scanf("%d",&n); //输入个数n;
for(i=1;i<=n;++i)
{
cin>>a[i].score;
cin>>a[i].name;
} //输入n组数据
for(i=1;i<=n;++i)
{
for(j=i+1;j<=n;++j)
{
if(a[i].score>a[j].score)
{
temp=a[j].score;
a[j+1].score=a[j].score;
a[j+1].score=temp;
} //想法:用冒泡排序,找到最大的数,最后输出
}
cout<<a[i].score<<endl;
}
return 0;
}
问题:过程过于繁琐,不够simple and stupid
别人代码参考:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
struct student {
string name;
int score;
} a[100]; //定义结构体
int main() {
int n, max = 0;
cin >> n; //输入个数n;
for (int i = 0; i < n; i++)
{
cin >> a[i].score;
cin >> a[i].name; //输入数据;
if (a[i].score > max) //比较输入的数与之前最大的数的大小关系
{
max = a[i].score; //如果比之前最大的数还大,则将这个数赋值到max上
}
}
for (int i = 0; i < n; i++)
{
if (a[i].score == max)
{
cout << a[i].name;
}
} //输出最高分数的人名
return 0;
}