奖项排名 (20分)

7-5 奖项排名 (20分)

第一届程序设计大赛采用PTA平台,参赛选手可以通过排名实时查看自己名次和成绩。该比赛奖项设置如下:一等奖、二等奖、三等奖、优秀奖个数分别为参赛人数的5%、10%、20%、30%,例如参赛人数为57,则一等奖、二等奖、三等奖、优秀奖获奖人数分别为2、5、11、17。比赛结束后,参赛选手想即时查看自己获得的奖项。请你通过编程重新显示排行榜,不但能够看到所有参赛选手的名次和成绩,还可以看到所获奖项信息。

输入格式:
输入第一行为一个正整数n(20≤n≤100),表示参赛人数,随后n行,每行给出每个参赛选手的准考证号和成绩,用空格分割。其中准考证号为形如“lyu201809090601”的15位字符数字串,成绩为一个正整数。

输出格式:
按照排名从高到低的顺序输出所有选手信息,一个参赛选手信息占一行,包括名次、准考证号、成绩、奖项,中间用空格进行分割。名次从高到低为1、2、3、…,依次类推。一等奖、二等奖、三等奖和优秀奖分别用数字1、2、3、4表示,没有获奖输出0。题目保证所有成绩均不相同。

输入样例:

36
lyu201309290406 194
lyu201409300205 74
lyu201409300229 191
lyu201509010102 67
lyu201509010602 172
lyu201509090223 34
lyu201509100425 21
lyu201509230239 66
lyu201509310201 169
lyu201509310223 60
lyu201609000503 142
lyu201609060103 146
lyu201609060105 55
lyu201609100301 9
lyu201709000415 79
lyu201709000416 49
lyu201709000504 106
lyu201709000505 147
lyu201709040103 177
lyu201709040104 163
lyu201709040110 116
lyu201709090109 38
lyu201709090111 29
lyu201709090726 112
lyu201709100313 130
lyu201709100625 108
lyu201809000118 189
lyu201809000238 127
lyu201809040321 3
lyu201809150107 100
lyu201809150121 35
lyu201809150125 10
lyu201809150126 30
lyu201809150128 23
lyu201809150129 18
lyu201809150326 119

输出样例:

1 lyu201309290406 194 1
2 lyu201409300229 191 2
3 lyu201809000118 189 2
4 lyu201709040103 177 2
5 lyu201509010602 172 3
6 lyu201509310201 169 3
7 lyu201709040104 163 3
8 lyu201709000505 147 3
9 lyu201609060103 146 3
10 lyu201609000503 142 3
11 lyu201709100313 130 3
12 lyu201809000238 127 4
13 lyu201809150326 119 4
14 lyu201709040110 116 4
15 lyu201709090726 112 4
16 lyu201709100625 108 4
17 lyu201709000504 106 4
18 lyu201809150107 100 4
19 lyu201709000415 79 4
20 lyu201409300205 74 4
21 lyu201509010102 67 4
22 lyu201509230239 66 0
23 lyu201509310223 60 0
24 lyu201609060105 55 0
25 lyu201709000416 49 0
26 lyu201709090109 38 0
27 lyu201809150121 35 0
28 lyu201509090223 34 0
29 lyu201809150126 30 0
30 lyu201709090111 29 0
31 lyu201809150128 23 0
32 lyu201509100425 21 0
33 lyu201809150129 18 0
34 lyu201809150125 10 0
35 lyu201609100301 9 0
36 lyu201809040321 3 0

#include<stdio.h>
#include<string.h>
struct student{
	char num[20];
	int score;
}stu[101];

void swap(int *a,int *b){			//交换操作
	int tmp;
	tmp=*a;
	*a=*b;
	*b=tmp;
}

int main(){
	int n,i,j,max;
	int first,second,third,excelent,cnt=0;
	char temp[20];
	
	scanf("%d",&n);
	
	first=n*0.05; 			//写出各奖项人数
	second=n*0.1; 
	third=n*0.2; 
	excelent=n*0.3;

	getchar();
	for(i=0;i<n;i++)		
		scanf("%s %d",&stu[i].num,&stu[i].score);
	for(i=0;i<n;i++){				//按照排名从高到低的顺序排序
		max=i;
		for(j=i+1;j<n;j++){
			if(stu[j].score>stu[max].score)
				swap(&max,&j);			//交换下标,大的下标往前放。
		}
		//printf("%d\n",max);
		swap(&stu[i].score,&stu[max].score);	//下标交换了,分数也要交换
		/*	下面是交换准考证号
		*/
		strcpy(temp,stu[i].num);				
		strcpy(stu[i].num,stu[max].num);
		strcpy(stu[max].num,temp);
	}
	//printf("%s %d",stu[1].num,stu[1].score);
	/*
	排好序就简单了,按名次输出
	*/
	int k=first;
	for(i=0;i<first;i++){
		printf("%d %s %d 1\n",++cnt,stu[i].num,stu[i].score);
	}
	k=k+second;
	for(i=cnt;i<k;i++){
		printf("%d %s %d 2\n",++cnt,stu[i].num,stu[i].score);
	}
	k=k+third;
	for(i=cnt;i<k;i++){
		printf("%d %s %d 3\n",++cnt,stu[i].num,stu[i].score);
	}
	k=k+excelent;
	for(i=cnt;i<k;i++){
		printf("%d %s %d 4\n",++cnt,stu[i].num,stu[i].score);
	}
	for(i=cnt;i<n;i++){
		printf("%d %s %d 0\n",++cnt,stu[i].num,stu[i].score);
	}
	return 0;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值