By Jalan
知识工具需求
数学
数据结构和算法
语言
题干
给N个学生记录,Id和分数,按照分数非递增排序.输出成绩在给定区间的学生
输入条件
格式:
N
name[1] ID[1] grade[1]
name[2] ID[2] grade[2]
… …
name[N] ID[N] grade[N]
grade1 grade2
name和id不超过10位,grade在[0,100]
grade1 grade2范围边界.保证成绩都不一样.
输出条件
输出在[grade1, grade2]范围内的非递增排序的name和id,没有打印NONE
例子
例1
输入
4
Tom CS000001 59
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
60 100
输出
Mike CS991301
Mary EE990830
Joe Math990112
题解
第一次
思路
- 结构体包含成绩 id和name,建立大小是N的结构体数组List,输入保存
- 创建结果数组result遍历数组,范围在内的加入result
- result空则输出,不空排序result输出.
预期时间复杂度
nlogn
编写用时
9分钟
代码
CPP
#include <algorithm>
#include <stdio.h>
#include <vector>
using namespace std;
struct node
{
int g;
char name[11], id[11];
};
int cmp(node a, node b)
{
if (a.g > b.g)
{
return 1;
}
return 0;
}
int main(int argc, char const *argv[])
{
//1
int N;
scanf("%d", &N);
vector<node> list(N);
for (int i = 0; i < N; i++)
{
scanf("%s %s %d", list[i].name, list[i].id, &list[i].g);
}
int g1, g2;
scanf("%d%d", &g1, &g2);
//2
vector<node> result;
for (int i = 0; i < N; i++)
{
if (list[i].g >= g1 && list[i].g <= g2)
{
result.push_back(list[i]);
}
}
//3
if (result.size() == 0)
{
printf("NONE");
}
else
{
sort(result.begin(), result.end(), cmp);
for (int i = 0; i < result.size(); i++)
{
printf("%s %s\n", result[i].name, result[i].id);
}
}
return 0;
}
运行用时
结尾
看在我写了这么多注释的份上可以给我点个赞嘛,求求惹=]砰砰砰,给我加点写下去的油呀@.@
也欢迎关注我的CSDN账号呀,接下来两个月我应该会按这个格式更新所有的PTA甲级题目
**开心code每一天**