学生成绩ABCD排名

【问题描述】每个学生有4门功课,英语,高数,C语言,物理。所有课程都以A,B,C,D这4个等级进行评价。

                    请对所有学生按成绩由高到低进行排序,规则为:A个数最多的排前面,当A个数相同,比较B的个数,以此类推。

                    请使用结构体定义每个学生的信息。
【输入形式】第一行输入一个整数n表示学生人数。

                    接下来每行为:学号,名字,英语成绩,高数成绩,C语言成绩,物理成绩

【输出形式】按学生成绩由高到低的顺序输出学生信息

【样例输入】4

                    101 zhang A B C C

                    102 li B A B D

                    103 wang A C B B

                    104 dong B A B A
【样例输出】104 dong B A B A

                    103 wang A C B B

                    102 li B A B D

                    101 zhang A B C C

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*【问题描述】每个学生有4门功课,英语,高数,C语言,物理。所有课程都以A,B,C,D这4个等级进行评价。
请对所有学生按成绩由高到低进行排序,规则为:A个数最多的排前面,当A个数相同,比较B的个数,以此类推。*/
typedef struct Student {
	int ID;
	char name[20];
	char sore[4];
}Student;
typedef struct countnum {
	Student student;
	int num[4];
}Countnum;
int main() {
	int n;
	scanf("%d", &n);
	Countnum arr[10] = { 0 };
	for (int i = 0; i < n; i++) {
		scanf("%d %s %c %c %c %c", &arr[i].student.ID, arr[i].student.name, &arr[i].student.sore[0], &arr[i].student.sore[1], &arr[i].student.sore[2], &arr[i].student.sore[3]);
		for (int j = 0; j < 4; j++) {
			if (arr[i].student.sore[j] == 'A') {
				arr[i].num[0] += 1;
			}
			else if (arr[i].student.sore[j] == 'B') {
				arr[i].num[1] += 1;
			}
			else if (arr[i].student.sore[j] == 'C') {
				arr[i].num[2] += 1;
			}
			else {
				arr[i].num[3] += 1;
			}
		}
	}
	for (int i = 0; i < n-1; i++) {
		for (int j = 0; j < n - i - 1; j++) {
			countnum temp;
			if (arr[j].num[0] > arr[j + 1].num[0]) {
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
			else if (arr[j].num[1] > arr[j + 1].num[1]) {
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
			else if (arr[j].num[2] > arr[j + 1].num[2]) {
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
			else if (arr[j].num[3] > arr[j + 1].num[3]) {
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	for (int i = 0; i < n; i++) {
		printf("%d %s ", arr[i].student.ID, arr[i].student.name);
		printf("%c %c %c %c\n", arr[i].student.sore[0], arr[i].student.sore[1], arr[i].student.sore[2], arr[i].student.sore[3]);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值