标签:type 整数 name bre str string类 包含 i++ begin
题目1014:排名
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:9361
解决:2820
测试输入包含若干场考试的信息。每场考试信息的第1行给出考生人数N ( 0 < N < 1000 )、考题数M ( 0 < M < = 10 )、分数线(正整数)G;第2行排序给出第1题至第M题的正整数分值;以下N行,每行给出一名考生的准考证号(长度不超过20的字符串)、该生解决的题目总数m、以及这m道题的题号(题目号由1到M)。
当读入的考生人数为0时,输入结束,该场考试不予处理。
对每场考试,首先在第1行输出不低于分数线的考生人数n,随后n行按分数从高到低输出上线考生的考号与分数,其间用1空格分隔。若有多名考生分数相同,则按他们考号的升序输出。
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
3
CS003 60
CS001 37
CS004 37
0
1
CS000000000000000002 20
分析:主要进行输入数据的处理。用到c_str()函数。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <vector> 6 #include <string> 7 using namespace std; 8 9 typedef struct{ 10 string id; 11 int score; 12 } candidate; 13 14 bool cmp(candidate a, candidate b){ 15 if(a.score != b.score) 16 return a.score > b.score; 17 else 18 return a.id < b.id; 19 } 20 21 int main(){ 22 //N表示人数,M表示考题数,G分数线 23 int N, M, G, m, num, sum; 24 int i, j; 25 string str; 26 int s[10]; 27 char id[21]; 28 candidate stu; 29 vector<candidate> v; 30 while(scanf("%d %d %d", &N, &M, &G)){ 31 if(N == 0) 32 break; 33 v.clear(); 34 int reach = 0; 35 for(i = 0; i < M; i++) 36 scanf("%d", &s[i]);//每题分数 37 for(i = 0; i < N; i++){ 38 scanf("%s %d", id, &m); 39 str = id; 40 sum = 0; 41 for(j = 0; j < m; j++){ 42 scanf("%d", &num); 43 sum += s[num - 1]; 44 } 45 if(sum >= G){ 46 reach++; 47 v.push_back(stu); 48 v[reach - 1].id = str; 49 v[reach - 1].score = sum; 50 } 51 } 52 sort(v.begin(), v.end(), cmp); 53 printf("%d\n", reach); 54 for(i = 0; i < v.size(); i++){ 55 printf("%s %d\n", v[i].id.c_str(), v[i].score);//c_str()函数 56 //cout << v[i].id << " " << v[i].score << endl; 57 } 58 } 59 return 0; 60 }
1 #include <iostream> 2 #include <algorithm> 3 #include <vector> 4 #include <string> 5 using namespace std; 6 7 typedef struct{ 8 string id; 9 int score; 10 } candidate; 11 12 bool cmp(candidate a, candidate b){ 13 if(a.score != b.score) 14 return a.score > b.score; 15 else 16 return a.id < b.id; 17 } 18 19 int main(){ 20 //N表示人数,M表示考题数,G分数线 21 int N, M, G, m, num, sum; 22 int i, j; 23 string str; 24 int s[10]; 25 candidate stu; 26 vector<candidate> v; 27 while(cin >> N >> M >> G){ 28 if(N == 0) 29 break; 30 v.clear(); 31 int reach = 0; 32 for(i = 0; i < M; i++) 33 cin >> s[i];//每题分数 34 for(i = 0; i < N; i++){ 35 cin >> str >> m; 36 sum = 0; 37 for(j = 0; j < m; j++){ 38 cin >> num; 39 sum += s[num - 1]; 40 } 41 if(sum >= G){ 42 reach++; 43 v.push_back(stu);//这里一定要注意,先在容器中创造一个结构体空间,然后在赋值 44 v[reach - 1].id = str; 45 v[reach - 1].score = sum; 46 } 47 } 48 sort(v.begin(), v.end(), cmp); 49 cout << reach << endl; 50 for(i = 0; i < v.size(); i++){ 51 cout << v[i].id << " " << v[i].score << endl; 52 } 53 } 54 return 0; 55 }
总结:需要注意的是,vector容器是结构体类型的话,push_back()元素的方法
标签:type 整数 name bre str string类 包含 i++ begin
原文地址:http://www.cnblogs.com/qinduanyinghua/p/6498423.html