ZJNU 1164 - 考试排名——中级

Posted stelayuri

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZJNU 1164 - 考试排名——中级相关的知识,希望对你有一定的参考价值。

1、如果一个单元为0,表示没做过这题,不计入成绩

2、如果一个单位为负数,表示做错了这题,不计入成绩

所以只要一个单元为正数(不论是否有括号)都说明做出了这一题,计入成绩

将名字和成绩都当作字符串读入,方便处理含有括号的情况

字符串读入后检查末尾是否为‘)‘即可分开判断有无括号的情况(如果有括号,成绩一定存在)

为了方便可以用 结构体/自定义函数/排序自定义compare函数 来实现

当然,不使用结构体可以用普通数组代替

不使用algorithm库的sort可以用冒泡选择这两种基本排序做(不会存在卡时间的情况)

 

做法1:C/无结构体/无sort

 1 /*
 2 Written By StelaYuri
 3 On 2019/08/22
 4 */
 5 #include<stdio.h>
 6 #include<string.h>
 7 int main(){
 8     int i,u,p,n,m,tm[10000],ac[10000],poi=0,tmd,wtd,id,dt;
 9     char nm[10000][11],cd[11],k;
10     scanf("%d%d",&n,&m);
11     while(scanf("%s",nm[poi])!=EOF){
12         tm[poi]=0;
13         ac[poi]=0;
14         for(i=0;i<n;i++){
15             scanf("%d",&dt);
16             if(dt>0){
17                 ac[poi]++;
18                 tm[poi]+=dt;
19                 scanf("%c",&k);
20                 if(k==(){
21                     scanf("%d%*c",&dt);
22                     tm[poi]+=dt*m;
23                 }
24             }
25         }
26         poi++;
27     }
28     for(i=0;i<poi;i++)//排序
29         for(u=poi-1;u>i;u--)
30             if(ac[u]>ac[u-1]||ac[u]==ac[u-1]&&tm[u]<tm[u-1]||ac[u]==ac[u-1]&&tm[u]==tm[u-1]&&strcmp(nm[u-1],nm[u])>0){
31                 id=ac[u];
32                 ac[u]=ac[u-1];
33                 ac[u-1]=id;
34                 id=tm[u];
35                 tm[u]=tm[u-1];
36                 tm[u-1]=id;
37                 strcpy(cd,nm[u]);
38                 strcpy(nm[u],nm[u-1]);
39                 strcpy(nm[u-1],cd);
40             }
41     for(i=0;i<poi;i++)
42         printf("%-10s %2d %4d
",nm[i],ac[i],tm[i]);
43     
44     return 0;
45 }

 

做法2:C++/结构体/sort

 1 /*
 2 Written By StelaYuri
 3 */
 4 #include<cstdio>
 5 #include<cstring>
 6 #include<algorithm>
 7 using namespace std;
 8 struct node{
 9     char name[15];
10     int sum,ac;
11 }stu[10000];
12 int m;
13 char dat[15];
14 int getDigit(int l,int r){
15     int i=l,res=0,f=1;
16     if(dat[i]==-){
17         f=-1;
18         i++;
19     }
20     for(;i<r;i++)
21         res=res*10+dat[i]-0;
22     return f*res;
23 }
24 int getDScore(int len){
25     int i;
26     for(i=0;i<len;i++)
27         if(dat[i]==()
28             break;
29     return getDigit(0,i)+m*getDigit(i+1,len-1);
30 }
31 bool cmp(node a,node b){
32     if(a.ac!=b.ac)
33         return a.ac>b.ac;
34     if(a.sum!=b.sum)
35         return a.sum<b.sum;
36     return strcmp(a.name,b.name)==-1;
37 }
38 int main(){
39     int n,i,t=0,len,d;
40     scanf("%d%d",&n,&m);
41     while(scanf("%s",stu[t].name)!=EOF){
42         for(i=1;i<=n;i++){
43             scanf("%s",dat);
44             len=strlen(dat);
45             if(dat[len-1]!=)){
46                 d=getDigit(0,len);
47                 if(d>0){
48                     stu[t].sum+=d;
49                     stu[t].ac++;
50                 }
51             }
52             else{
53                 stu[t].sum+=getDScore(len);
54                 stu[t].ac++;
55             }
56         }
57         t++;
58     }
59     sort(stu,stu+t,cmp);
60     for(i=0;i<t;i++)
61         printf("%-10s %2d %4d
",stu[i].name,stu[i].ac,stu[i].sum);
62     
63     return 0;
64 }

 

以上是关于ZJNU 1164 - 考试排名——中级的主要内容,如果未能解决你的问题,请参考以下文章

ZJNU 1365 - Window--中级

ZJNU 1531 - 丢手绢--中级

ZJNU 1138 - 小兔的棋盘——中级

软考中级软件设计师考试大纲

中级审计师考试多选题究竟如何计分?

2018年中级会计师考试网上报名浏览器兼容设置方法