第一道用结构体解决的问题
Posted programming123
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一道用结构体解决的问题相关的知识,希望对你有一定的参考价值。
【Description】
[C - 排名]
今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑
每题的分值,所以并不是最后的排名。给定录取分数线,请你写程序找出最后通过分数线的
考生,并将他们的成绩按降序打印。
[input]
测试输入包含若干场考试的信息。每场考试信息的第1行给出考生人数N ( 0 < N
< 1000 )、考题数M ( 0 < M < = 10 )、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一
名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号
(题目号由1到M)。
当读入的考生人数为0时,输入结束,该场考试不予处理。
[output]
对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高
到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考
号的升序输出。
[sample input]
4 5 25
10 10 12 13 15
CS004 3 5 1 3
CS003 5 2 4 1 3 5
CS002 2 1 2
CS001 3 2 3 5
1 2 40
10 30
CS001 1 2
2 3 20
10 10 10
CS000000000000000001 0
CS000000000000000002 2 1 2
0
[sample output]
3
CS003 60
CS001 37
CS004 37
0
1
CS000000000000000002 20
Hint
Huge input, scanf is recommended.
【源代码】
【有一个指标时】
bool cmp(node a, node b)
{
return a.score>b.score;
}
【有两个/多个指标时】
bool cmp(node a, node b)
{
if( )
return ....
else if( )
return...
else
return....
}
按照这个思路,定义结构体名为Node,在Node这个结构体里含有学生姓名数组(用来存放学生姓名)、学生成绩整型数字两个参量。关于排序那里的else return strcmp(a.name,b.name)>0?0:1;当两个人成绩相同时,如果a.name>b.name,则返回值为0,返回假(不符合),此时通过cmp排序使前者小于后者输出(因为题目要求成绩相同时,按学号从小到大输出),如果a.name<b.name,则返回值为1,返回真(已经符合了,就不用进行cmp排序了)。
后面的代码就是正常思路输入输出了。
注意输入结构体里面的成员变量时:scanf("%d",&node[i].name);【&结构体名称[成员变量的下标,即类似数组下标].成员变量【如score,name等】】
输出结构体里面的成员变量时:scanf("%d",&node[i].name);【&结构体名称[成员变量的下标,即类似数组下标].成员变量【如score,name等】】
(其实输入输出基本是一样的)
噢还有头文件要记得:
以上是关于第一道用结构体解决的问题的主要内容,如果未能解决你的问题,请参考以下文章
c++中结构体套结构体用 = {0}初始化编译报错解决办法(用memset或者={})(error: invalid conversion)