码迷,mamicode.com
首页 > 编程语言 > 详细

算法学习--Day1

时间:2018-04-15 11:39:56      阅读:178      评论:0      收藏:0      [点我收藏+]

标签: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,分别代表每个学生的学号和成绩。

输出描述:

按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来。
如果学生的成绩相同,则按照学号的大小进行从小到大排序。
示例1

输入

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;
}

 

算法学习--Day1

标签:main   std   刷机   title   接下来   day   i++   考试   测试   

原文地址:https://www.cnblogs.com/Pinging/p/8834009.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!