九度oj 题目1014:排名
2017-03-03 21:00
267 查看
题目1014:排名
时间限制:1秒
内存限制:32兆
特殊判题:否
提交:9361
解决:2820
题目描述:
今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名。给定录取分数线,请你写程序找出最后通过分数线的考生,并将他们的成绩按降序打印。
输入:
测试输入包含若干场考试的信息。每场考试信息的第1行给出考生人数N(0<N<1000)、考题数M(0<M<=10)、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号(题目号由1到M)。
当读入的考生人数为0时,输入结束,该场考试不予处理。
输出:
对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考号的升序输出。
样例输入:
样例输出:
语法:
constchar*c_str();
c_str()函数返回一个指向正规C字符串的指针常量,内容与本string串相同.
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string对象转换成c中的字符串样式。
注意:一定要使用strcpy()函数等来操作方法c_str()返回的指针
比如:最好不要这样:
char*c;
strings="1234";
c=s.c_str();//c最后指向的内容是垃圾,因为s对象被析构,其内容被处理,同时,编译器也将报错——将一个constchar*赋与一个char*。
应该这样用:
charc[20];
strings="1234";
strcpy(c,s.c_str());
这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作
再举个例子
c_str()以char*形式传回string内含字符串
如果一个函数要求char*参数,可以使用c_str()方法:
strings="HelloWorld!";
printf("%s",s.c_str());//输出"HelloWorld!"
总结:需要注意的是,vector容器是结构体类型的话,push_back()元素的方法
时间限制:1秒
内存限制:32兆
特殊判题:否
提交:9361
解决:2820
题目描述:
今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名。给定录取分数线,请你写程序找出最后通过分数线的考生,并将他们的成绩按降序打印。
输入:
测试输入包含若干场考试的信息。每场考试信息的第1行给出考生人数N(0<N<1000)、考题数M(0<M<=10)、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号(题目号由1到M)。
当读入的考生人数为0时,输入结束,该场考试不予处理。
输出:
对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考号的升序输出。
样例输入:
4525 1010121315 CS0043513 CS003524135 CS002212 CS0013235 1240 1030 CS00112 2320 101010 CS0000000000000000010 CS000000000000000002212 0
样例输出:
3 CS00360 CS00137 CS00437 0 1 CS00000000000000000220 分析:主要进行输入数据的处理。用到c_str()函数。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<string> usingnamespacestd; typedefstruct{ stringid; intscore; }candidate; boolcmp(candidatea,candidateb){ if(a.score!=b.score) returna.score>b.score; else returna.id<b.id; } intmain(){ //N表示人数,M表示考题数,G分数线 intN,M,G,m,num,sum; inti,j; stringstr; ints[10]; charid[21]; candidatestu; vector<candidate>v; while(scanf("%d%d%d",&N,&M,&G)){ if(N==0) break; v.clear(); intreach=0; for(i=0;i<M;i++) scanf("%d",&s[i]);//每题分数 for(i=0;i<N;i++){ scanf("%s%d",id,&m); str=id; sum=0; for(j=0;j<m;j++){ scanf("%d",&num); sum+=s[num-1]; } if(sum>=G){ reach++; v.push_back(stu); v[reach-1].id=str; v[reach-1].score=sum; } } sort(v.begin(),v.end(),cmp); printf("%d\n",reach); for(i=0;i<v.size();i++){ printf("%s%d\n",v[i].id.c_str(),v[i].score);//c_str()函数 //cout<<v[i].id<<""<<v[i].score<<endl; } } return0; }
#include<iostream> #include<algorithm> #include<vector> #include<string> usingnamespacestd; typedefstruct{ stringid; intscore; }candidate; boolcmp(candidatea,candidateb){ if(a.score!=b.score) returna.score>b.score; else returna.id<b.id; } intmain(){ //N表示人数,M表示考题数,G分数线 intN,M,G,m,num,sum; inti,j; stringstr; ints[10]; candidatestu; vector<candidate>v; while(cin>>N>>M>>G){ if(N==0) break; v.clear(); intreach=0; for(i=0;i<M;i++) cin>>s[i];//每题分数 for(i=0;i<N;i++){ cin>>str>>m; sum=0; for(j=0;j<m;j++){ cin>>num; sum+=s[num-1]; } if(sum>=G){ reach++; v.push_back(stu);//这里一定要注意,先在容器中创造一个结构体空间,然后在赋值 v[reach-1].id=str; v[reach-1].score=sum; } } sort(v.begin(),v.end(),cmp); cout<<reach<<endl; for(i=0;i<v.size();i++){ cout<<v[i].id<<""<<v[i].score<<endl; } } return0; }
总结:需要注意的是,vector容器是结构体类型的话,push_back()元素的方法
相关文章推荐
- 九度OJ题目1014:排名
- 九度oj 题目1014:排名 【ZJU2005机试题5】
- 九度OJ题目1014:排名
- 九度OJ 1014 排名
- 九度题目1014:排名 (结构体多级排序)
- 九度oj-1014-排名
- 九度OJ 1014 排名
- 九度OJ 1014:排名 (排序)
- 九度题目1014:排名 && 2005年浙江大学计算机及软件工程研究生机试真题
- 九度OJ 1014:排名 (排序)
- 九度oj-1014-排名
- 九度 题目1014:排名
- 九度OJ-题目1171:C翻转-10计院上机C
- 九度OJ题目1387斐波那契数列
- 九度OJ 题目1060:完数VS盈数
- 【剑指Offer面试编程题】题目1511:从尾到头打印链表--九度OJ
- 九度OJ 题目1032:ZOJ
- 【剑指Offer面试编程题】题目1372:最大子向量和--九度OJ
- 【剑指Offer面试编程题】题目1506:求1+2+3+...+n--九度OJ
- 题目1173:查找 九度OJ