码迷,mamicode.com
首页 > 其他好文 > 详细

ZJNU 1164 - 考试排名——中级

时间:2020-01-25 22:04:17      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:node   数组   函数   +=   bsp   时间   str   结构   排名   

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\n",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\n",stu[i].name,stu[i].ac,stu[i].sum);
62     
63     return 0;
64 }

 

ZJNU 1164 - 考试排名——中级

标签:node   数组   函数   +=   bsp   时间   str   结构   排名   

原文地址:https://www.cnblogs.com/stelayuri/p/12233397.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!