成绩排名系统

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值