XDOJ4-2 成绩名次

这题因为需要进行排序,所以就再建立一个结构体用来存储原来的顺序,最终顺序的输出借助排序完的与之前存储的原顺序,具体的请看我的代码。

问题描述

输入n名(100>n>0)同学的课程考试成绩,成绩均为浮点数(0<=成绩<=100),且n人成绩各不相同。编写程序,输出这n名同学成绩对应的名次,最高成绩名次为1,依次类推。

输入说明

输入为两行,第一行是一个整数n表示n个人;第二行为n个浮点数,表示n个人的成绩,成绩均为浮点数(0<=成绩<=100),且n人成绩各不相同。

输出说明

依次输出n个整数,分别表示各人成绩对应名次,数据间空一个空格。

输入样例


60 98 70.5 45 20

输出样例

3 1 2 4 5

#include <stdio.h>
#include <math.h> 
#include <string.h>
#include <stdlib.h> 

typedef struct student{
	double score;
	int num;
	int sequence;
}stu1, t, stu2;

int main()
{
	int n, i, j;
	scanf("%d", &n);
	student stu1[n], t, stu2[n];
	for(i=0;i<n;i++){
		scanf("%lf", &stu1[i].score); 	
		stu1[i].num = i+1;
	}
	for(i=0;i<n;i++){
		stu2[i].score = stu1[i].score;
	}
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(stu1[i].score>stu1[j].score){
				t = stu1[i];
				stu1[i] = stu1[j];
				stu1[j] = t;
			}
		}
	}
//	for(i=0;i<n;i++){
//		printf("%d\n", stu1[i].num);
//	}
	int k = 0;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(stu1[j].score!=stu2[i].score){
				k++;
			}else{
				printf("%d", k+1);
				k=0;    //将k初始化
				break;
			}	
		} 
		if(i!=n-1)	printf(" ");
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值