UVA-12412 师兄帮帮忙 题解答案代码 算法竞赛入门经典第二版
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 师兄帮帮忙 题解答案代码 算法竞赛入门经典第二版相关推荐
- UVA-12171 雕塑 题解答案代码 算法竞赛入门经典第二版
GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 这道题目在<算法竞赛入门经典第二版>书中标注了星号,也是第一道出现星号的 ...
- UVA-1598 交易所 题解答案代码 算法竞赛入门经典第二版
GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 有意思的一个题目.书上说这是一个不错的优先队列练习题,但实际上它其实是一个 ...
- UVA-814 邮件传输代理的交互 题解答案代码 算法竞赛入门经典第二版
GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版 AC代码 #include<iostream> #include< ...
- UVA-508 莫尔斯电码 题解答案代码 算法竞赛入门经典第二版
https://github.com/jzplp/aoapc-UVA-Answer 这个题目就是在考验英语水平呀!(或者题目本身也写的不清楚) 尤其是多个完全匹配(!)和模糊匹配(?)的情况,我题意看 ...
- 算法竞赛入门经典第二版课后习题答案第二章
算法竞赛入门经典第二版课后习题答案 第二章 习题2-1水仙花数 输出100-999中的所有水仙花数.若三位数ABC满足ABC=A^3+B^3+C^3,则称其为水仙花数.例如153=1^3+5^3+3^ ...
- 算法竞赛入门经典(第二版) | 程序3-6 WERTYU (UVa 10082)(常量数组)
题目描述: 输入一个按键盘顺序,向后错一位后敲出的字符串,输出本来想打出的句子, 且输入中不会出现不合法的字符,例如A. Simple input: O S, GOME YPFSU/ Simple o ...
- UVA - 1225 Digit Counting(刘汝佳紫书题单(算法竞赛入门经典 第二版 2014)
个人感觉这道题有表述问题 他的题目表述说明测试数据中的数是不超过20的,但其实他的测试点中是有百位数的,所以按两位数去处理数据显然会造成数组越界. 代码如下 #include <bits/std ...
- A Typical Homework UVA - 12412 师兄帮帮忙
题目链接 (题目背景略,有兴趣的读者请自行阅读原题) 编写一个成绩管理系统(SPMS).最多有100个学生,每个学生有如下属性. SID:学生编号,包含10位数字. CID:班级编号,为不超过20的正 ...
- 刘汝佳算法竞赛入门经典 第二单元习题答案自编
欢迎交流讨论! @2-1 #include <fstream> using namespace std;ifstream fin("aplusb.in"); ofstr ...
最新文章
- linux运维第二讲
- 中国科学院院士张钹:人工智能目前只能在某些行为上尽量接近人
- 程序员的你是否熟练掌握Chrome开发者工具?
- 06-图1 列出连通集 (25 分)
- 两个队列实现一个栈思路c语言,两个栈实现队列功能C语言实现能运行!
- CAEmitterLayer 和 CAEmitterCell 粒子发射
- Android 数据解析——Gson与json
- 【数据结构与算法】二项队列与二叉堆的比较
- 这个网站收集了很多杂志的审稿周期和收稿、拒稿意见,值得看看
- 财务造假丑闻后,瑞幸遭大股东清仓股份,CEO和COO双双被停职
- 史上最著名的电脑病毒
- newifi3刷什么固件最稳定_新路由三无线路由器刷什么固件好?
- CDH6.3.2安装部署
- boost1.79编译
- Linux下设置网卡速率 降低网卡速度
- QQ农场外挂开发实践
- 双向晶闸管控制AC220V电机
- Opencv教程-图像二值化
- 开关调色新世界BP2888电源解决方案
- 智能手机防盗软件测试自学,用谁找回手机几率最大?手机防盗软件功能大PK