高考志愿排序C语言题目,最详细的注释,看不懂你来打我

描述

我国的高考志愿投档是严格按照高考分数从高到低的顺序排列,排列的规则如下:首先按照总分降序排列;当总分相同时,再按照语文分数降序排序;当语文分数也相同时,再按照数学分数降序排序;当数学分数也相同时,再按照英语分数降序排序。所有分数都相同时,再按照录入的顺序排列。这样,每个考生的位序都是唯一的。

现在给定n(10≤n≤1000)个人的有关信息,按照上述规则排序之后,输出最前面的m(1≤m≤n)个人的序号。

例如有10个人的成绩(每一行依次是语、数、外成绩;学生的序号从1开始,就是他所在的行数)如下:

73 76 78

74 77 77

71 79 79

75 74 77

71 72 70

71 75 79

79 74 73

73 75 74

73 70 79

77 79 70

正确的排序结果如下:

3 2 1 7 10 4 6 8 9 5

再比如有10个考生的成绩如下:

66 60 63

61 63 60

63 65 60

69 60 60

64 68 69

68 62 63

63 67 67

69 68 61

65 60 65

62 65 65

排序结果如下:

5 8 7 6 10 9 4 1 3 2

格式

输入格式

第一行是两个整数n和m,表示后续有n个考生的信息,要求输出m个考生的序号。从第2行到n+1行,每行一个考生的信息,依次是:语文分、数学分、英语分。 注意:学生的序号从1开始计数,就是它所在的行号减一

输出格式

输出m个整数,表示排序后的前m个考生的序号,整数之间用空格分隔

代码 

#include<stdio.h>
int main()
{
	int a,b;
	scanf("%d%d",&a,&b);  //输入 
	int k[a][3];
	for(int i=0;i<a;i++){
		scanf("%d%d%d",&k[i][0],&k[i][1],&k[i][2]);   //输入 
	}
	int sum[a];
	for(int i=0;i<a;i++){
		sum[i]=k[i][0]+k[i][1]+k[i][2];   //求每个考生的成绩之和 
	}
	int aa[a];
	for(int i=0;i<a;i++){     //用于存放每个考生的成绩 
		aa[i]=0;
	}
	int cent=1;  //用于记录考生的名次并存放在aa中 
	for(int i=0;i<a;i++){  //从第一个考生开始到最后一个 
		cent=1;   //重置 
		for(int j=0;j<a;j++){  //将a[i]这个考生于所有考生进行比较 
			if(sum[i]<sum[j]){  //分数小于其他的考生,名次cent++ 
				cent++;
			}else if(sum[i]==sum[j]){  //总分数相等,依次比较其他成绩,如果都相等,比较输入的次序 
					if(k[i][0]<k[j][0]){
						cent++;
					}else if((k[i][0]==k[j][0])&&(k[i][1]<k[j][1])){
						cent++;
					}else if((k[i][0]==k[j][0])&&(k[i][1]==k[j][1])&&(k[i][2]<k[j][2])){
						cent++;
					}else if((k[i][0]==k[j][0])&&(k[i][1]==k[j][1])&&(k[i][2]=k[j][2])&&(i>j)){
						cent++;
					}
			}
		}
		aa[i]=cent;  //赋给名次数组 
	}
	int bb=1;  //从第一名开始查找第一名的输入的次序,找到后++,开始找第2名,直到第b名 
	for(int i=0;i<b;i++){
		for(int j=0;j<a;j++){
			if(aa[j]==bb){
				printf("%d ",j+1);
				bb++;
				break;  //break,已经找到,跳出开始找下一个,保证bb只加一次 
			}
		}
	}
}

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值