标签:main std 刷机 title 接下来 day i++ 考试 测试
为了冲刺研究生初试,我准备在课余时间捡起往日的算法。多多练习算法题目,提前准备算法的机试。
今天是4月14日,距离算法考试还有两个月的时间吧,这两个月的所学所得我就都记录在这里了。不仅仅包括算法的准备,还包括英语、项目的准备。希望在两个月后能到理想的学校去深造学习。
Come on!
开始我就从基础的题目入手,鉴于九度oj已经gg了,我将阵地转移到牛客网,在这里开始刷机试题目。
第一题:
有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。
输入描述:
测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。
每个学生的数据包括姓名(长度不超过100的字符串)、年龄(整形数)、成绩(小于等于100的正数)。
输出描述:
将学生信息按成绩进行排序,成绩相同的则按姓名的字母序进行排序。
然后输出学生信息,按照如下格式:
姓名 年龄 成绩
学生姓名的字母序区分字母的大小写,如A要比a的字母序靠前(因为A的ASC码比a的ASC码要小)。
示例1
输入
3
abc 20 99
bcd 19 97
bed 20 97
输出
bcd 19 97
bed 20 97
abc 20 99
这道题目不难,把代码放上
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; struct E{ char name[101]; int age; int grades; }buf[1000]; bool cmp(E a, E b){ if (a.grades != b.grades) return a.grades < b.grades; int cmp = strcmp(a.name,b.name); if (cmp != 0){ return cmp < 0; } return a.age<b.age; } int main() { int n; while (scanf("%d",&n)!=EOF){ for(int i=0;i<n;i++){ scanf("%s%d%d",buf[i].name,&buf[i].age,&buf[i].grades); } sort(buf,buf+n,cmp); for(int i=0;i<n;i++){ printf("%s %d %d\n",buf[i].name,buf[i].age,buf[i].grades); } } return 0; }
第二题:
输入第一行包括一个整数N(1<=N<=100),代表学生的个数。 接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩。
按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。 如果学生的成绩相同,则按照学号的大小进行从小到大排序。
3 1 90 2 87 3 92
2 87 1 90 3 92
#include <stdio.h> #include <iostream> #include <algorithm> using namespace std; struct E{ int number; int scores; }buf[101]; bool cmp(E a,E b){ if (a.scores!=b.scores) return a.scores<b.scores; else{ return a.number<b.number; } } int main(){ int n; cin>>n; for(int i=0;i<n;i++){ scanf("%d%d",&buf[i].number,&buf[i].scores); } sort(buf,buf+n,cmp); for(int i=0;i<n;i++){ printf("%d %d\n",buf[i].number,buf[i].scores); } return 0; }
标签:main std 刷机 title 接下来 day i++ 考试 测试
原文地址:https://www.cnblogs.com/Pinging/p/8834009.html