题目
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。
输入格式:
每个测试输入包含 1 个测试用例,格式为
第 1 行:正整数 n
第 2 行:第 1 个学生的姓名 学号 成绩
第 3 行:第 2 个学生的姓名 学号 成绩
... ... ...
第 n+1 行:第 n 个学生的姓名 学号 成绩
其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。
输出格式:
对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。
输入样例:
3
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
输出样例:
Mike CS991301
Joe Math990112
代码
-
不同函数
- 此处是记录的这种输入输入方式!!!我们可以看到两个字符串之间是有空格的,我第一时间想的在输入的时候如果出现空格时还得处理一下,经查阅资料完全多余的想法!!!
cin函数: 当遇到空格、tab或者换行符的时候自动截断!下面的不再写入
scanf函数: 完全也是如此。 scanf("%s,%s", &a,&b); 甚至两者之间不用有空格
但是问题来了!如果我们想输入有空格的字符串怎么办???
cin.getline(a, sizeof(a));便可以获取我们有空格的字符串 - 当需要一次性输入多个数据的时候
while(count–) 也是我值得学习的地方!!!
- 此处是记录的这种输入输入方式!!!我们可以看到两个字符串之间是有空格的,我第一时间想的在输入的时候如果出现空格时还得处理一下,经查阅资料完全多余的想法!!!
-
核心思想
- 我在最初做这个题目时,想创建一个student数组,将所有的学生的数据包含进来,在进行比较。 发现这是完全多余的!!
题目中并没有要求去保存学生的数据,只是在输入之后获取成绩最高的那个学生的数据就可以,所以定义一个学生类highest和一个学生类lowest用来在每次比较好保存就可以了!!!!
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
typedef struct {
char name[11];
char stuNo[11];
int score;
}student;
int main() {
int count;
student highest, lowest;
student temp;
highest.score = -1;
lowest.score = 101;
scanf("%d", &count);
while(count--) {
cin>>temp.name>>temp.stuNo>>temp.score;
if(temp.score > highest.score) highest = temp;
if(temp.score < lowest.score) lowest = temp;
}
cout<< highest.name << " " << highest.stuNo << endl;
cout<< lowest.name <<" " << lowest.stuNo;
return 0;
}