招新成绩统计

    科技2022-07-10  123

    文章目录

    题目思路代码 总结


    题目


    思路

    其实此题题目理解不难,考的就是你对结构体的处理方面问题! 思路上的步骤就是如下:

    当输入一个考场的成绩时候,进行一次排序当所有考场的成绩输入完成后,再进行一次排序排序就用到了sort排序之后你要考虑怎么去排名 相同的是同一名次不相同的就需要自身加一(有两个都是最高分100,都是第一名,那么99分就不是第二了,应该是第三)

    代码

    /* 招新成绩统计 1.这个涉及多个数据,需要结构体 2. 如果成绩一样则排名一样,按学号升序排列。 2.先对考场进行排名,在进行总的排名 3.总体排名 4.考场排名 */ #include<iostream> #include <bits/stdc++.h> using namespace std; struct node { string id; int score,tot_rank,location,loc_rank; }; bool cmp(const node &a, const node &b) { return a.score==b.score ? a.id<b.id : a.score>b.score; } int main() { int n,m,num=0; cin>>n;//考场数 struct node v[30001]; for(int i=1;i<=n;i++) { cin>>m;//考场对应的人数 for(int j=1;j<=m;j++) { cin>>v[num].id>>v[num].score; v[num].location=i;//输入id,成绩 赋值考场 num++; } sort(v+num-m,v+num,cmp);//考场排序 v[num-m].loc_rank=1; for(int j=1;j<m;j++) { if(v[num-m+j].score==v[num-m+j-1].score) { v[num-m+j].loc_rank=v[num-m+j-1].loc_rank; } else v[num-m+j].loc_rank=j+1; } } sort(v,v+num,cmp);//总排名 v[0].tot_rank=1; for(int i=1;i<num;i++) { if(v[i].score==v[i-1].score) v[i].tot_rank=v[i-1].tot_rank; else v[i].tot_rank=i+1; } cout<<num<<endl;; for(int i=0;i<num;i++) { cout<<v[i].id<<" "<<v[i].tot_rank<<" "<<v[i].location<<" "<<v[i].loc_rank<<endl; } return 0; }

    总结

    此题其实不太难,我对结构体运用的不多,导致没有写出来.还是需要努力刷题.

    大家好,我是大一小菜鸡,又菜瘾还大!!

    Processed: 0.008, SQL: 8