Description
疫情期间,由于没法出门上筑柏上课,于是筑柏的老师在平台上弄出了连续数天的c++程序挑战赛,每天挑战赛结束后都会有排名,现在请你破解出排名程序,制成条形统计图。
排名规则就不用了多说了,想必大家都知道。我们这么做:比如有两个人参加比赛,分别叫做abc和Bcd,成绩分别是90和80,表示如下:
100|-
90|-*
80|-*---*
70|-*---*
60|-*---*
50|-*---*
40|-*---*
30|-*---*
20|-*---*
10|-*---*
0|-*---*
----abc-Bcd
Input
输入共n+1行,第一行输入总人数n(n<=10)。接下来n行每行首先输入一个字符串s,为同学名字(s长度=3,只包含大小写字母),接着是一个数c,为同学成绩(c<=100,一定能被10整除)。
Output
输出共12行。每行先是一个数,表示此行表示的得分。如果遇到错位,则空位用空格补。数之后为一个竖杠“|”,分数对准同学名字的中间字符,每个名字之间由一个空格隔开。最后一行输出同学名字,第一个名字开头字符在竖杠“|”之后。
Sample Input 1
3 abc 90 Xbn 90 hJn 80
Sample Output 1
100| 90| * * 80| * * * 70| * * * 60| * * * 50| * * * 40| * * * 30| * * * 20| * * * 10| * * * 0| * * * abc Xbn hJn
AC:
#include<iostream>
#include<algorithm>
#include<cstring>
#include<iomanip>
using namespace std;
struct LEMON{
char name[3];
int point;
};
bool csp(LEMON f,LEMON l){
if(f.point!=l.point)return f.point>l.point;
else{
if(f.name[0]!=l.name[0]){
return f.name[0]<l.name[0];
}else if(f.name[1]!=l.name[1]){
return f.name[1]<l.name[1];
}else{
return f.name[2]<l.name[2];
}
}
}
int main(){
int n;
cin>>n;
LEMON nmp[n];
for(int i=0;i<n;i++){
cin>>nmp[i].name>>nmp[i].point;
}sort(nmp,nmp+n,csp);
for(int i=10;i>=0;i--){
cout<<setw(3)<<i*10<<" ";
for(int j=0;j<n;j++)if(nmp[j].point>=i*10)cout<<"* ";
cout<<endl;
}cout<<" ";
for(int i=0;i<n;i++){
cout<<" "<<nmp[i].name;
}return 0;
}