https://github.com/jzplp/aoapc-UVA-Answer

好麻烦的一道题。

题目没说如果在选菜单,query和stat的时候输入的时候如果是错误的怎么办,根据测试知道是重新输出一遍提示语。

#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
using namespace std;struct Stu {char sid[13];int cid;char name[13];int score[4];int rank, sum;double aver;int num;bool operator<(const Stu & rhs) const {return sum > rhs.sum;}
};
int num = 0;
#define OFFSET 1e-5
vector<Stu> arr;void rankStu() {int i;if(arr.empty())return ;arr[0].rank = 1;for(i=1; i<arr.size(); ++i) {if(arr[i].sum == arr[i-1].sum)arr[i].rank = arr[i-1].rank;elsearr[i].rank = i+1;}
}void addStu() {int i;Stu s;puts("Please enter the SID, CID, name and four scores. Enter 0 to finish.");while(scanf("%s", s.sid) == 1) {if(strlen(s.sid) == 1 && s.sid[0] == '0')break;scanf("%d %s",&(s.cid), s.name);s.sum = 0;for(i=0; i<4; ++i) {scanf("%d", &(s.score[i]));s.sum += s.score[i];}s.aver = (double)s.sum / 4 + OFFSET;auto ip = arr.begin();while(ip != arr.end()) {if(strcmp(s.sid, ip->sid) == 0)break;else++ip;}if(ip != arr.end())puts("Duplicated SID.");else {s.num = num++;arr.push_back(s);}puts("Please enter the SID, CID, name and four scores. Enter 0 to finish.");}sort(arr.begin(), arr.end());rankStu();
}void removeStu() {int c;char s[30];puts("Please enter SID or name. Enter 0 to finish.");while(scanf("%s", s) == 1) {c = 0;if(strlen(s) == 1 && s[0] == '0')break;auto ip = arr.begin();while(ip != arr.end()) {if(strcmp(s, ip->sid) == 0 || strcmp(s, ip->name) == 0) {ip = arr.erase(ip);++c;} else++ip;}printf("%d student(s) removed.\n", c);puts("Please enter SID or name. Enter 0 to finish.");}rankStu();
}bool compNum(const int &i, const int &j) {return arr[i].num < arr[j].num;
} void queryStu() {puts("Please enter SID or name. Enter 0 to finish.");int i,j,k;char s[30];while(scanf("%s", s) == 1) {if(strlen(s) == 1 && s[0] == '0')break;vector<int> v;for(int i = 0; i != arr.size(); ++i)if(strcmp(s, arr[i].sid) == 0 || strcmp(s, arr[i].name) == 0)v.push_back(i);if(!v.empty()) {sort(v.begin(), v.end(), compNum);for(auto i = 0; i != v.size(); ++i) {printf("%d %s %d %s ", arr[v[i]].rank, arr[v[i]].sid, arr[v[i]].cid, arr[v[i]].name);for(j=0; j<4; ++j)printf("%d ", arr[v[i]].score[j]);printf("%d %.2lf\n", arr[v[i]].sum,arr[v[i]].aver);}}puts("Please enter SID or name. Enter 0 to finish.");}
}
char s_score[4][20] = {"Chinese", "Mathematics", "English", "Programming"};void showStat() {puts("Please enter class ID, 0 for the whole statistics.");int i,j,k=0,cid;scanf("%d", &cid);int arrSum[4] = {0,0,0,0};int arrPass[4] = {0,0,0,0};int arrOverall[5] = {0,0,0,0,0};for(auto ip = arr.begin(); ip != arr.end(); ++ip)if(cid == 0 || ip->cid == cid) {++k;j = 0;for(i=0;i<4;++i) {arrSum[i] += ip->score[i];if(ip->score[i] >= 60) {++arrPass[i];++j;}}arrOverall[j]++; }for(i=0;i<4;++i) {puts(s_score[i]);if(k != 0)printf("Average Score: %.2lf\n", (double)arrSum[i]/k+OFFSET);elseprintf("Average Score: %.2lf\n", (double)0);printf("Number of passed students: %d\n",  arrPass[i]);printf("Number of failed students: %d\n\n", k-arrPass[i]);} puts("Overall:");j = 0;for(i=4;i>0;--i) {printf("Number of students who passed ");j += arrOverall[i];if(i == 4)printf("all ");elseprintf("%d or more " , i);printf("subjects: %d\n", j);}printf("Number of students who failed all subjects: %d\n\n", arrOverall[0]);
}int main() {char s[30];while(1) {puts("Welcome to Student Performance Management System (SPMS).\n");puts("1 - Add\n2 - Remove\n3 - Query\n4 - Show ranking\n5 - Show Statistics\n0 - Exit\n");scanf("%s", s);if(s[0] == '0')break;switch(s[0]) {case '1':addStu();break;case '2':removeStu();break;case '3':queryStu();break;case '4':puts("Showing the ranklist hurts students' self-esteem. Don't do that.");break;case '5':showStat();break;}}return 0;
}

UVA-12412 师兄帮帮忙 题解答案代码 算法竞赛入门经典第二版相关推荐

  1. UVA-12171 雕塑 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题目在<算法竞赛入门经典第二版>书中标注了星号,也是第一道出现星号的 ...

  2. UVA-1598 交易所 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 有意思的一个题目.书上说这是一个不错的优先队列练习题,但实际上它其实是一个 ...

  3. UVA-814 邮件传输代理的交互 题解答案代码 算法竞赛入门经典第二版

    GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 #include<iostream> #include< ...

  4. UVA-508 莫尔斯电码 题解答案代码 算法竞赛入门经典第二版

    https://github.com/jzplp/aoapc-UVA-Answer 这个题目就是在考验英语水平呀!(或者题目本身也写的不清楚) 尤其是多个完全匹配(!)和模糊匹配(?)的情况,我题意看 ...

  5. 算法竞赛入门经典第二版课后习题答案第二章

    算法竞赛入门经典第二版课后习题答案 第二章 习题2-1水仙花数 输出100-999中的所有水仙花数.若三位数ABC满足ABC=A^3+B^3+C^3,则称其为水仙花数.例如153=1^3+5^3+3^ ...

  6. 算法竞赛入门经典(第二版) | 程序3-6 WERTYU (UVa 10082)(常量数组)

    题目描述: 输入一个按键盘顺序,向后错一位后敲出的字符串,输出本来想打出的句子, 且输入中不会出现不合法的字符,例如A. Simple input: O S, GOME YPFSU/ Simple o ...

  7. UVA - 1225 Digit Counting(刘汝佳紫书题单(算法竞赛入门经典 第二版 2014)

    个人感觉这道题有表述问题 他的题目表述说明测试数据中的数是不超过20的,但其实他的测试点中是有百位数的,所以按两位数去处理数据显然会造成数组越界. 代码如下 #include <bits/std ...

  8. A Typical Homework UVA - 12412 师兄帮帮忙

    题目链接 (题目背景略,有兴趣的读者请自行阅读原题) 编写一个成绩管理系统(SPMS).最多有100个学生,每个学生有如下属性. SID:学生编号,包含10位数字. CID:班级编号,为不超过20的正 ...

  9. 刘汝佳算法竞赛入门经典 第二单元习题答案自编

    欢迎交流讨论! @2-1 #include <fstream> using namespace std;ifstream fin("aplusb.in"); ofstr ...

最新文章

  1. linux运维第二讲
  2. 中国科学院院士张钹:人工智能目前只能在某些行为上尽量接近人
  3. 程序员的你是否熟练掌握Chrome开发者工具?
  4. 06-图1 列出连通集 (25 分)
  5. 两个队列实现一个栈思路c语言,两个栈实现队列功能C语言实现能运行!
  6. CAEmitterLayer 和 CAEmitterCell 粒子发射
  7. Android 数据解析——Gson与json
  8. 【数据结构与算法】二项队列与二叉堆的比较
  9. 这个网站收集了很多杂志的审稿周期和收稿、拒稿意见,值得看看
  10. 财务造假丑闻后,瑞幸遭大股东清仓股份,CEO和COO双双被停职
  11. 史上最著名的电脑病毒
  12. newifi3刷什么固件最稳定_新路由三无线路由器刷什么固件好?
  13. CDH6.3.2安装部署
  14. boost1.79编译
  15. Linux下设置网卡速率 降低网卡速度
  16. QQ农场外挂开发实践
  17. 双向晶闸管控制AC220V电机
  18. Opencv教程-图像二值化
  19. 开关调色新世界BP2888电源解决方案
  20. 智能手机防盗软件测试自学,用谁找回手机几率最大?手机防盗软件功能大PK

热门文章

  1. PCB基础知识(一)
  2. 前端人真实项目中遇到的问题总结
  3. matlab 桥梁中一跨选择合适的跨径组合
  4. 织梦php安装无数据库,DeDeCms织梦程序安装及使用常见问题集锦
  5. 《高效PDCA工作术》读书笔记1
  6. 推荐系统综述——附Xmind三分钟重点速览版
  7. hive sql 实现 时间循环
  8. WiFi 万能钥匙的「破解原理」是啥
  9. swiper的介绍以及使用(移动端滑动屏幕切换页面案例)
  10. android_ADB 调试工具总结