程序设计第一次训练题 B大力出奇迹
2020-03-10 00:19
106 查看
题意:
读取所给的人的做题的信息,来通过做题的数量,罚时等对这一组人进行排序。
思路:
即给定一组数据,其中包含了每个人的人名,解题的数量,以及错题罚时等信息,在读入人数量和单位罚时的后,一次读出每个人的自己的做题信息,来判断做题的多少,来对这些人的成绩进行排序。用结构题来存储每个人的信息,用字符数组读入人名,再读入成绩。注意每次cin后,判断,如果是正数,则做题数加1,并且做题时间加上。负数则不管,每次读入数据后,用getchar读入后一个字符,判断,如果是(,则读入括号中的数字,乘上单位罚时,加入到时间中去。再用getchar消化后一个),随后再cin读入下一个数据。第一次getchar读入的如果是不是(,则直接cin读入下一个数据。直到读入所有的数据后,结束。结构体中记得重载<,先以做题数量正序排列,再以罚时升序排列,最后以顺序排列,然后用sort函数排序后输出。最后注意输出时的格式要求。
总结:
这个题目主要是要判断字符的读取问题,即如何读出数字后,判断后面有没有括号,然后需要读出括号中的内容,其他的实现慢慢写还行。(但在最后的格式输出的时候,一开始用的cin和cout,只有第一名字左对齐了,其后的所有都右对齐了,后来用的printf挺好使,不知道哪里的问题。)
代码:
#include <iostream> #include <queue> #include <stack> #include <algorithm> #include <iomanip> using namespace std; struct P{ char name[10]; //姓名 int a; //正确的题数 int b; //罚时 int c; //一开始的顺序 bool operator<(const P &p){ if(a != p.a) return a>p.a; //题数的降序 if(b != p.b) return b<p.b; //罚时的升序 return c<p.c; } }ps[2000]; int main(){ int m, n; cin>>m>>n; int k=0; int score=0; char c; while(cin>>ps[k].name){ for(int i=0; i<m; i++){ //依次读入成绩 cin>>score; if(score>0){ //做出来了 ps[k].a++; //题目数增加 ps[k].b+=score; //罚时 } c=getchar(); if(c=='('){ //判断是否有括号,里面有罚时 cin>>score; ps[k].b=ps[k].b+score*n; c=getchar(); //消化 ) } } k++; } sort(ps,ps+k); //排序 for(int i=0; i<k;i++ ){ //输出 printf("%-10s ",ps[i].name); printf("%2d ",ps[i].a); printf("%4d\n",ps[i].b); } return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 程序设计Week2实验——B - 爆零(×)大力出奇迹(√)
- 大力再出奇迹,1024 张TPU,65536 batch size,仅76分钟训练完BERT!
- 【20200228程序设计思维与实践 Week2 实验】B - 爆零(×)大力出奇迹(√)
- 程序设计第一次训练 C-瑞神打牌
- 程序设计思维与实践 Week2 实验 (3/4/数据班) B - 爆零(×)大力出奇迹(√)
- 【程序设计思维与实践 Week2 实验B】 爆零(×)大力出奇迹(√)
- 程序设计思维与实践 Week2 实验:B - 爆零(×)大力出奇迹(√)
- Android程序设计第一次作业
- 挑战编程 程序设计竞赛训练手册-1.6.8 澳大利亚投票(Australian Voting)
- 实验week2 B - 爆零(×)大力出奇迹(√)
- 第一次C程序设计上机报告
- 第一次C程序设计上机报告
- 第一次C程序设计实验报告
- 第一次程序设计作业
- C程序设计课程-2012电子信息 第一次上机实验
- C语言综合研究与高强度程序设计训练 2
- ACM第一次训练第六题
- 第一次训练题第一题的代码
- 第八届福建省大学生程序设计竞赛训练总结【7/12】
- 第十二届北京师范大学程序设计竞赛决赛训练总结【7/10】