UVA - 12412 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
来源:互联网 发布:dnf最新版数据芯片搬砖 编辑:程序博客网 时间:2024/05/01 14:23
//
看了书又看了网上的代码敲出来的, 汗, 自己敲是很难做出来的
//
进步之处, 处理EPS 问题, 代码在后面
//
#include<stdio.h>#include<string.h>#define EPS 1e-5const int maxn = 1000;const int maxl = 10 + 5;int n;int removed[maxn];char sid[maxn][maxl];int cid[maxn];char name[maxn][maxl];int score[maxn][5];const char *course_name[]={"Chinese","Mathematics","English","Programming"};void print_menu(){ printf("Welcome to Student Performance Management System (SPMS).\n"); printf("\n"); printf("1 - Add\n"); printf("2 - Remove\n"); printf("3 - Query\n"); printf("4 - Show ranking\n"); printf("5 - Show Statistics\n"); printf("0 - Exit\n"); printf("\n");}int valid(int k){ for (int i=0;i<k;i++) { if(!removed[i]) { if(!strcmp(sid[i],sid[k])) return 0; } } return 1;}void add(){ for(;;) { printf("Please enter the SID, CID, name and four scores. Enter 0 to finish.\n"); scanf("%s",sid[n]); if(!strcmp(sid[n],"0")) break; scanf("%d%s%d%d%d%d",&cid[n],name[n],&score[n][0],&score[n][1],&score[n][2],&score[n][3]); if(valid(n)) { score[n][4]=score[n][0]+score[n][1]+score[n][2]+score[n][3]; n++; } else printf("Duplicated SID.\n"); }}int rank(int k){ int r=0; for(int i=0;i<n;i++) { if(!removed[i]&&score[i][4]>score[k][4]) r++; } return r+1;}void DQ (int isq){ char s[maxl]; for(;;) { printf("Please enter SID or name. Enter 0 to finish.\n"); scanf("%s",s); if(!strcmp (s, "0")) break; int r=0; for(int i=0;i<n;i++) if(!removed[i]) { if(!strcmp(sid[i],s)||!strcmp(name[i],s)) { if(isq) printf("%d %s %d %s %d %d %d %d %d %.2f\n",rank(i),sid[i],cid[i],name[i],score[i][0],score[i][1],score[i][2],score[i][3],score[i][4],score[i][4]/4.0+EPS); else { removed[i]=1; r++; } } } if(!isq) printf("%d student(s) removed.\n",r); }}double get_course_stat(int c,int s,int* passed,int* failed){ int tot=0; *passed=*failed=0; for(int i=0;i<n;i++) { if(!removed[i]&&(!c||cid[i]==c)) { tot+=score[i][s]; if(score[i][s]>=60) (*passed)++; else (*failed)++; } } return (double)tot/(double)(*passed+*failed);}void get_overall_stat(int c,int* cnt){ memset(cnt, 0, sizeof(cnt)); for(int i=0;i<n;i++) { if(!removed[i]&&(!c||cid[i]==c)) { int k=0; for(int j=0;j<4;j++) { if(score[i][j]>=60) k++; } cnt[k]++; } }}void stat(){ int c; printf("Please enter class ID, 0 for the whole statistics.\n"); scanf("%d", &c); for(int i=0;i<4;i++) { int passed,failed; double avg=get_course_stat(c,i,&passed,&failed); printf("%s\n",course_name[i]); printf("Average Score: %.2f\n",avg+EPS); printf("Number of passed students: %d\n",passed); printf("Number of failed students: %d\n",failed); printf("\n"); } int cnt[5]; get_overall_stat(c,cnt); printf("Overall:\n"); printf("Number of students who passed all subjects: %d\n",cnt[4]); printf("Number of students who passed 3 or more subjects: %d\n",cnt[4]+cnt[3]); printf("Number of students who passed 2 or more subjects: %d\n",cnt[4]+cnt[3]+cnt[2]); printf("Number of students who passed 1 or more subjects: %d\n",cnt[4]+cnt[3]+cnt[2]+cnt[1]); printf("Number of students who failed all subjects: %d\n",cnt[0]); printf("\n");}int main(){ for(;;) { int choice; print_menu(); scanf("%d",&choice); if(choice==0) break; if(choice==1) add(); if(choice==2) DQ(0); if(choice==3) DQ(1); if(choice==4) printf("Showing the ranklist hurts students' self-esteem. Don't do that.\n"); if(choice==5) stat(); } return 0;}
EPS问题:
#include<stdio.h>int main(){ double f; for(f = 2; f > 1; f-= 1e-6); printf("%.7f\n", f); printf("%.7f\n", f/4); printf("%.1f\n", f/4); return 0;}
输出:
0.9999990
0.2499998
0.2
在减1e-6的过程中有误差, 所以一遍采取加上一个EPS输出, EPS通常比最低精度还要小几个数量级的小实数
0 0
- UVa 12412 - A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
- UVa 12412 - A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
- UVA - 12412 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
- UVa 12412 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang) 【模拟】
- 12412 - A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
- 12412 - A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
- Problem 029——UVa 12412 - A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
- UVA 12412 - A Typical Homework (a.k.a Shi Xiong Bang Bang Mang) 模拟题 不好怎么评价
- UVa12412 - A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
- UVA12412 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
- UVa 12412 - A Typical Homework
- UVA-12412A Typical Homework
- [uva 12412]A Typical Homework(师兄帮帮忙)
- A Typical Homework(UVa 12412)
- A Big Bang to Me
- UVa 12412 A Typical Homework(学生信息管理系统)
- UVa 12412 A Typical Homework(学生信息管理系统)
- zheli zhen d hen bang a
- JS实现增删改查
- Unix Network 1
- python时间操作
- C语言学习笔记:01_基本数据类型
- Peer To Peer——对等网络
- UVA - 12412 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)
- C语言学习笔记:02_输入输出函数
- MySQL学习笔记(三):order by排序问题
- 挖坑,把自己埋了两天(我与MySQL的抓狂事)
- Unity 3D酷跑游戏中遇到的问题
- C语言学习笔记:04_选择结构
- WinForm中如何实现嵌入form窗体(panel与子窗体)
- 确定比赛名次(拓扑排序)
- 从源码解释Android事件分发机制