SDNU OJ 1182 奖学金

先来贴一个地址:http://www.acmicpc.sdnu.edu.cn/problem/show/1182

题目名字已列在标题上。下面贴一下原题:

描述:

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。 
任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是: 
7 279

5 279 
这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是: 
5 279 

7 279 
则按输出错误处理,不能得分。 

输入:
输入包含n+1行: 

第1行为一个正整数n(6<=n<=300),表示该校参加评选的学生人数。 

第2到n+1行,每行有3个用空格隔开的数字,每个数字都在O到100之间z第1行的3个数 字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为l~n (恰好是输入数据的行号减1)。 

所给的数据都是正确的,不必检验。

输出:
输出共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。
样例输入:
6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

样例输出:
6 265
4 264
3 258
2 244
1 237

对于这道题。说实话我除了排序不会以外没什么大问题。可见吴瑕师姐教得多么棒对不对?
无所谓啦,反正我现在懂了。代码贴过来~~ SDNU OJ 1182 奖学金_第1张图片
SDNU OJ 1182 奖学金_第2张图片
第25行贴重了,众卿自行删除==

思路

这是一个C++程序。这道题的意思就是说,先输入一个正整数代表n个学生,然后每行输入每个学生的语数英三科成绩。排名时是先看总分,再看语文,再看学号,输出。所以关键就在“排序”二字上。

其实如果没有学sort的话,我或许会一个while循环,一堆if语句开始死磕==不过sort真的很好用,这是能对给定区间内所有元素进行排序的函数。很全能。

sort的使用方法是sort(n,n+m,cmp)。前面的n,n+m即为要排序的区间(n,n+m);这个函数在algorithm里,所以前面当然要有头文件。师哥说sort有一个好处就是捆绑,捆绑是什么我就不说了,都是字面意思。所以如果就我要给一个学生的三个值排名,那么用sort是极好的。当然我也不会用别的了==

现在我要定义一个结构体,用struct函数。这样三门学科的成绩、总成绩和学号就可以赋给一个人了。
前面编程规范(这个我放在了草稿箱里)中提到过,定义变量时最好用一个有意义的字母或单词表示。我嫌单词太麻烦,所以分别用了这三门学科英文的大写首字母。值得一提的是,在编程里许多时候大写和小写是不一样的。
接下来要定义cmp。cmp即compare 的意思。 定义时一定要每种情况都写上啊
用了if--else if--else。
bool cmp(A a, A b)就是举一个例子,假设A中有a,b两个变量,那么如果出现以下情况该怎样。bool中return 1即为真,return 0即为假,所以比如第一句中return 1 相当于return a.sum > b.sum。

注意一下几点:

scanf 输入很快,cin真的很慢很慢的。
cout后面的endl很容易忘记的,就像scanf中的取地址符。不过以后写习惯了就自然记住了。
struct函数的函数体花括号后面是有分号的。
后面的x[400],其实我提交的时候超时了一次,后来改成了301才过了。所以说要勤俭节约啊
struct函数和class函数:从客观上说,结构体的一切功能都可以由类来取代,但是方便性不同。不过有待探究的是,究竟什么时候用结构类更方便?这个容后再议。
还有,你又又又问我!=EOF是什么意思什么时候用?
EOF是 end of file 的意思。当函数读取文档时,文档末尾会有 end of file 这三个字。不过我们看不见就是了。所以这里的意思是告诉系统如果未读取到EOF那么循环继续。



后记:
其实我一点都不会C++啊啊啊啊(尽管她和C之间有着深远联系)。所以说这是我这辈子第一次用C++写的程序。是不是比什么Hello World 高级多了?诶嘿嘿。
另外,我必须强调这一点,真的,真的,真的 吴瑕师姐  聪聪师哥真的讲的很好,而且我觉得他好有耐心的。

你可能感兴趣的:(SDNU OJ 1182 奖学金)