U410866 统计分数

本体为本人原创,请勿抄袭。

难度:普及-

题目背景

  • 为了统计学生们的分数和排名,老师们翻来覆去睡不着觉。请你为老师编写一个这样的程序。

题目描述

这是一题将结构体和排序结合在一起的题。

输入格式

  1. 输入:
  • 第一行,学生的数量。
  • 第二行,学生的名字。
  • 第三行,学生的语文、数学、英语、历史、生物、地理、政治成绩。

输出格式

  1. 输出:
  • 第一行,学生的名字。
  • 第二行,学生的排名。
  • 第三行,学生的总分。

输入输出样例

输入 #1

复制代码
4
xiaowang
90 80 70 60 75 79 95
xiaohua
100 33 70 100 90 20 67
xiaoye
98 70 67 99 65 87 65
xiaozhang
56 78 89 90 78 87 66

输出 #1

复制代码
xiaoye
1
551
xiaowang
2
549
xiaozhang
3
544
xiaohua
4
480

输入 #2

复制代码
2
xiaohuang
80 80 80 80 80 80 80
xiaorui
81 79 100 60 80 99 61

输出 #2

复制代码
xiaorui
1
560
xiaohuang
1
560

说明/提示

  1. 提示
  • 1<n<10
  1. 说明
  • 会出现分数相等、总分相同的情况
  • 如果总分相同,先输出后输入的人的姓名,如样例2.

思路

很明显,这道题是一道将结构体和排序相结合的一道题。

  • 首先,我们需要定义一个结构体,至于定义什么,题目要求什么就定义什么。
cpp 复制代码
struct student{
	string name;
	int a,b,c,d,e,f,g;
	int s;
	int rank;
	int index; 
}a[11];
  • 然后,我们将七科成绩存入结构体中。
cpp 复制代码
for(int i=0;i<n;i++){
		cin>>a[i].name;
		cin>>a[i].a>>a[i].b>>a[i].c>>a[i].d>>a[i].e>>a[i].f>>a[i].g;
		a[i].s=a[i].a+a[i].b+a[i].c+a[i].d+a[i].e+a[i].f+a[i].g;		
	}
  • 接下来就是最重要的部分--排序。
cpp 复制代码
bool cmp(student x,student y){
	return x.s<y.s;
}
cpp 复制代码
sort(a,a+n,cmp);
for(int i=0;i<n;i++)a[i].rank=i;
  • 最后,题目要求:如果总分相同,先输出后输入的人的姓名。所以,我们可以用倒序输出来解决,如下:
cpp 复制代码
for(int i=n-1;i>=0;i--){
		cout<<a[i].name<<endl;
		cout<<sum<<endl;
		cout<<a[i].s<<endl;
		if(a[i].s!=a[i-1].s)sum++;
}

完整代码

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n,sum=1;
struct student{
	string name;
	int a,b,c,d,e,f,g;
	int s;
	int rank;
	int index; 
}a[11];
bool cmp(student x,student y){
	return x.s<y.s;
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i].name;
		cin>>a[i].a>>a[i].b>>a[i].c>>a[i].d>>a[i].e>>a[i].f>>a[i].g;
		a[i].s=a[i].a+a[i].b+a[i].c+a[i].d+a[i].e+a[i].f+a[i].g;		
	}
	sort(a,a+n,cmp);
	for(int i=0;i<n;i++)a[i].rank=i;
	for(int i=n-1;i>=0;i--){
		cout<<a[i].name<<endl;
		cout<<sum<<endl;
		cout<<a[i].s<<endl;
		if(a[i].s!=a[i-1].s)sum++;
	}
	return 0;
}
相关推荐
蒸蒸yyyyzwd31 分钟前
cpp 选手秋招学习笔记 day33
c++·笔记·求职招聘
郝学胜-神的一滴39 分钟前
Effective Python 条款 10 :海象运算符_=
开发语言·python·程序人生·开源
wuyk55541 分钟前
Python零基础入门第十四章:异常处理(try-except)
开发语言·python
wuyk5551 小时前
【Socket 进阶之路】第 3 章 TCP 三次握手 & 四次挥手深度剖析|连接建立、断开、状态机、TIME_WAIT 核心工程问题
服务器·开发语言·网络·物联网·网络协议·tcp/ip
wzdark5 小时前
基于堆的优先队列实现原理与复杂度分析4
算法
彧azz6 小时前
图的存储结构详解:邻接矩阵的原理、实现与应用
开发语言·数据结构·学习·php
老王熬夜敲代码7 小时前
BLAKE3:最快的密码学哈希函数
算法·密码学·哈希算法
hansang_IR7 小时前
【题解】P4460 [CQOI2018] 解锁屏幕
c++·算法
嵌入式学习菌7 小时前
Modbus‑RTU 数据类型分析
开发语言·单片机·bug
见闻小天地7 小时前
简博斯JG-C系列彩色激光同轴位移计:摄像头模组对位与行程测量的技术价值观察
人工智能·算法