2356 - 成绩排序

12 篇文章 0 订阅
9 篇文章 0 订阅

题目描述

【具体要求】

虽然现在学校已经不允许将学生每次的考试成绩公布,但是尽职尽责的班主任小青老师还是会私下将学生们的成绩排序,看看哪些学生进步了,哪些学生有所退步,针对退步的学生想一些提升方案。

现在请你通过编程来帮助小青老师实现全班 n 位同学成绩的排名。排名规则为总分从高到低排序,当出现总成绩相同时,根据语文成绩从高到低排序;当总成绩相同且语文成绩也相同时按照输入的先后顺序排序。

输入

输入共 n+1 行,第一行输入一个正整数 n(1 < n < 100)表示全班学生数量;

第 2~n+1 行,每行分别是学生姓名 m(1 < m < 20)、语文成绩、数学成绩、英语成绩,中间用空格隔开,各科成绩满分 100 分。

输出

输出共 n 行,根据题目要求的排序规则输出,每行分别为学生姓名、总成绩、语文成绩。

样例

输入

3
Jack 93 97 96 
Rose 96 98 94 
Lanbao 94 98 94

输出

Rose 288 96 
Lanbao 286 94 
Jack 286 93 

说明

本题共有五组测试数据,每通过一组测试数据得 10 分,满分 50 分。

蓝桥等考 C++组单选题样题(十六级)
若有语句:int a, *p = &a;则下列语句描述正确的是( )。
A p 是指向一维数组的指针
B p 是指向 int 类型的指针
C p 存储的是 a 的数值
D p 是指向函数的指针,该函数返回 int 类型的数据
【答案】B
【解析】p 是指向整型变量 a 的指针,存储的是 a 的地址,所以选项 B 正确
来源
蓝桥等考 C++组编程题样题(十六级)

标签

蓝桥杯等级考试 结构体 数组问题

题目链接

2356 - 成绩排序

错误小结

1.把函数中的node结构体写成了int
2.没有记录序号

错误代码

#include<bits/stdc++.h>
using namespace std;
struct node{
	string name;
	int yucj,scj,ycj,cj;
}a[125];
int none(int a,int b)//这里不能用int,应该用node结构体
{
	if(a.cj!=b.cj)
	{
		return a.cj>b.cj; 
	}
	else
	{
		return a.yucj>b.yucj;
	}
}
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i].name>>a[i].yucj>>a[i].scj>>a[i].ycj;
		a[i].cj=a[i].yucj+a[i].scj+a[i].ycj;
	}
	sort(a,a+n,none);
	for(int i=0;i<n;i++)
	{
		cout<<a[i].name<<' '<<a[i].cj<<' '<<a[i].yucj<<endl;
	}
	return 0;
}

正确代码

#include<bits/stdc++.h>
using namespace std;
struct node{
	string name;
	int yucj,scj,id,ycj,cj;
}a[125];
int none(node a,node b)
{
	if(a.cj!=b.cj)//成绩不同,比成绩
	{
		return a.cj>b.cj; 
	}
	else
	{
		if(a.yucj!=b.yucj)//成绩相同,比语文成绩
		{
			return a.yucj>b.yucj;
		}
		else//成绩相同,语文成绩相同,比学号
		{
			return a.id>b.id;
		}
	}
}
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i].name>>a[i].yucj>>a[i].scj>>a[i].ycj;
		a[i].cj=a[i].yucj+a[i].scj+a[i].ycj;
		a[i].id=i;
	}
	sort(a,a+n,none);
	for(int i=0;i<n;i++)
	{
		cout<<a[i].name<<' '<<a[i].cj<<' '<<a[i].yucj<<endl;
	}
	return 0;
}

总结

做这种结构体的题目还是要很仔细的,一旦不小心就会出现“解答错误”“编译错误”“运行超时”“输出超限”
废话:下次再见!记得三连哦!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值