题目
读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含 1 个测试用例,格式为第 1 行:正整数 n第 2 行:第 1 个学生的姓名 学号 成绩第 3 行:第 2 个学生的姓名 学号 成绩... ... ...第 n+1 行:第 n 个学生的姓名 学号 成绩其中姓名和学号均为不超过 10 个字符的字符串,成绩为 0 到 100 之间的一个整数,这里保证在一组测试用例中没有两个学生的成绩是相同的。输出格式:对每个测试用例输出 2 行,第 1 行是成绩最高学生的姓名和学号,第 2 行是成绩最低学生的姓名和学号,字符串间有 1 空格。输入样例:3Joe Math990112 89Mike CS991301 100Mary EE990830 95
输出样例:Mike CS991301Joe 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;}