T133308 57级返校测试重测-T3-成绩单

大致题意:

  • 给定n个学生的学号和分数,
  • 求各个分数段的人数,
  • 求把学号排序后的序列,
  • 求满分的人数以及学号。

基本思路:

  • 虽然看起来很繁琐(?),但就非常非常的简单,直接按题意做就好了。
  • 然后有个坑,这是(color{#FF3030}{字典顺序}),不是(color{#0000FF}{字典序})QAQ。
  • 字典顺序是个什么东东呢?嗯..就是排序不看长度,只看每个字母在字母表上的位置。
  • 然后就和字典序不一样,嗯,然后我一开始就wa了。/kk

Code:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <list>
using namespace std;
#define R read()
#define GC getchar()
#define ll long long
#define ull unsigned long long
#define INF 0x7fffffff
#define LLINF 0x7fffffffffffffff
ll read(){
    ll s=0,f=1;
    char c=GC;
    while(c<'0'||c>'9'){if(c=='-')f=-f;c=GC;}
    while(c>='0'&&c<='9'){s=s*10+c-'0';c=GC;}
    return s*f;
}
struct node{
    string id;
    int s;
}p[130010];
int n;
int book[20],goods;
string goodBook[130010];
bool cmp(node x,node y){
    return x.id<y.id;
}
bool cmp_str(string x,string y){
    return x<y;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;++i){//输入,以及记录各个分数段的人数
        cin>>p[i].id>>p[i].s;
        if(p[i].s>=1&&p[i].s<=9)++book[1];
        else if(p[i].s>=10&&p[i].s<=19)++book[2];
        else if(p[i].s>=20&&p[i].s<=29)++book[3];
        else if(p[i].s>=30&&p[i].s<=39)++book[4];
        else if(p[i].s>=40&&p[i].s<=49)++book[5];
        else if(p[i].s>=50&&p[i].s<=59)++book[6];
        else if(p[i].s>=60&&p[i].s<=69)++book[7];
        else if(p[i].s>=70&&p[i].s<=79)++book[8];
        else if(p[i].s>=80&&p[i].s<=89)++book[9];
        else if(p[i].s>=90&&p[i].s<=99)++book[10];
        else if(p[i].s>=100&&p[i].s<=109)++book[11];
        else if(p[i].s>=110&&p[i].s<=119)++book[12];
        else if(p[i].s>=120&&p[i].s<=129)++book[13];
        else if(p[i].s>=130&&p[i].s<=139)++book[14];
        else if(p[i].s>=140&&p[i].s<=149)++book[15];
        else if(p[i].s==150)goodBook[++goods]=p[i].id;
    }
    printf("1~9 10~19 20~29 30~39 40~49 50~59 60~69 70~79 80~89 90~99 100~109 110~119 120~129 130~139 140~149
");
    for(int i=1;i<=15;++i){//输出各个分数段的人数
        printf("%d ",book[i]);
    }
    printf("
");
    sort(p+1,p+n+1,cmp);//排序
    for(int i=1;i<=n;++i){
        cout<<p[i].id<<" "<<p[i].s<<"
";
    }
    printf("%d
",goods);//输出满分人数以及满分的学号
    if(goods==0){
        printf("No
");
        return 0;
    }
    sort(goodBook+1,goodBook+goods+1,cmp_str);
    for(int i=1;i<=goods;++i){
        cout<<goodBook[i]<<"
";
    }
    return 0;
}
原文地址:https://www.cnblogs.com/FUXyao/p/12875471.html