CE11.【C++ Cont】练习题组12(结构体专题)

目录

1.P5742【深基7.例11】评等级

题目

代码

提交结果

2.B2125 最高分数的学生姓名

题目

代码

方法1

提交结果

方法2:在方法1基础上改进

提交结果

​编辑 方法3:先排序后选,较麻烦

提交结果

​编辑

3.[NOIP2007 普及组] 奖学金

题目

错误代码

提交结果

调试分析

正确代码

提交结果


1.P5742【深基7.例11】评等级

题目

【深基7.例11】评等级 - 洛谷

题目描述

现有 N 名同学,每名同学需要设计一个结构体记录以下信息:学号、学业成绩和素质拓展成绩、综合分数(实数)。每行读入同学的学号、学业成绩和素质拓展成绩,并且计算综合分数(分别按照 70% 和 30% 权重累加),存入结构体中。还需要在结构体中定义一个成员函数,返回该结构体对象的学业成绩和素质拓展成绩的总分。

然后需要设计一个函数,其参数是一个学生结构体对象,判断该学生是否“优秀”。优秀的定义是学业和素质拓展成绩总分大于 140 分,且综合分数不小于 80 分。

当然通过本题很容易啦,本题只是为了帮助你训练结构体的使用方法。

本题存在精度误差问题,请将 a * 0.7 + b * 0.3 与 80 比较 转化为 a * 7 + b * 3 与 800 比较。

输入格式

第一行一个整数 N。

接下来 N 行,每行 3 个整数,依次代表学号、学业成绩和素质拓展成绩。

输出格式

N 行,如果第 i 名学生是优秀的,输出 Excellent,否则输出 Not excellent

输入输出样例

输入 #1

4
1223 95 59
1224 50 7
1473 32 45
1556 86 99

输出 #1

Excellent
Not excellent
Not excellent
Excellent

说明/提示

数据保证,1≤N≤1000,学号为不超过 100000 的正整数,学业成绩和素质拓展成绩为 0∼100 之间的正整数。

代码

本题较好考察了C24.【C++ Cont】结构体文章的知识点:成员函数的创建和调用

#include <iostream>
using namespace std;
struct Stu
{int id;int academic_score;//学业成绩int qual_dev_score;//素质拓展成绩double com_score;//综合成绩int add(){return academic_score+qual_dev_score;}
};
int  main()
{int n,i=0; Stu s[1010];cin>>n;while(n--){cin>>s[i].id>>s[i].academic_score>>s[i].qual_dev_score;s[i].com_score=0.7*s[i].academic_score+0.3*s[i].qual_dev_score;if ((s[i].add()>140)&&(7*s[i].academic_score+3*s[i].qual_dev_score)>=800)cout<<"Excellent"<<endl;elsecout<<"Not excellent"<<endl;i++;}return 0;
}

提交结果

2.B2125 最高分数的学生姓名

题目

最高分数的学生姓名 - 洛谷

题目描述

输入学生的人数,然后再输入每位学生的分数和姓名,求获得最高分数的学生的姓名。

输入格式

第一行输入一个正整数 N(N≤100),表示学生人数。

接着输入 N 行,每行包括一个整数和一个字符串,用空格分开,代表分数姓名。

分数是一个非负整数,且小于等于 100;

姓名为一个连续的字符串,中间没有空格,长度不超过 20。

数据保证所有同学的姓名都不同,而且最高分只有一位同学。

输出格式

获得最高分数同学的姓名。

输入输出样例

输入 #1

5
87 lilei
99 hanmeimei
97 lily
96 lucy
77 jim

输出 #1

hanmeimei

说明/提示

hanmeimei 的分数最高 99 分。

限制:使用结构体解决

代码

方法1

#include <iostream>
using namespace std;
struct Stu
{int score;string name;
};int  main()
{int n,highest_score=-1;int index=0;Stu s[110];cin>>n;n--;while(n--){cin>>s[n].score>>s[n].name;if (s[n].score>highest_score){index=n;highest_score=s[n].score;}}cout<<s[index].name;return 0;
}

提交结果

方法2:在方法1基础上改进

其实没有必要开辟那么多空间(Stu s[110];),题目只要求输出最高分数的学生姓名,因此只需要Stu s={-1,""};即可!!!

#include <iostream>
using namespace std;
struct Stu
{int score;string name;
};int  main()
{int n,highest_score=-1;string name; Stu s={0,""};cin>>n;n--;while(n--){cin>>s.score>>s.name;if (s.score>highest_score){highest_score=s.score;name=s.name; }}cout<<name;return 0;
}

提交结果

 方法3:先排序后选,较麻烦

#include <iostream>
#include <algorithm>
using namespace std;
struct Stu
{int score;string name;
};
bool cmp(struct Stu x,struct Stu y)
{return x.score>y.score;//排降序,最大值在s[0].score
}
int  main()
{int n,highest_score=-1;string name; Stu s[110];cin>>n;for (int i=0;i<n;i++)cin>>s[i].score>>s[i].name;sort(&s[0],&s[n-1],cmp);cout<<s[0].name;return 0;
}

提交结果

3.[NOIP2007 普及组] 奖学金

题目

[NOIP2007 普及组] 奖学金 - 洛谷

题目背景

NOIP2007 普及组 T1

题目描述

某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前 5 名学生发奖学金。期末,每个学生都有 3 门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。

任务:先根据输入的 3 门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。

注意,在前 5 名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是:

7 279  
5 279

这两行数据的含义是:总分最高的两个同学的学号依次是 7 号、5 号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为 7 的学生语文成绩更高一些。

如果你的前两名的输出数据是:

5 279  
7 279

则按输出错误处理,不能得分。

输入格式

共 n+1 行。

第 1 行为一个正整数 n≤300,表示该校参加评选的学生人数。

第 2 到 n+1 行,每行有 33 个用空格隔开的数字,每个数字都在 00 到 100 之间。第 j 行的 3 个数字依次表示学号为 j−1 的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为 1∼n(恰好是输入数据的行号减 1)。

保证所给的数据都是正确的,不必检验。

输出格式

共 5 行,每行是两个用空格隔开的正整数,依次表示前 5 名学生的学号和总分。

输入输出样例

输入 #1

6
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

输出 #1

6 265
4 264
3 258
2 244
1 237

输入 #2

8
80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98

输出 #2

8 265
2 264
6 264
1 258
5 258

错误代码

读题后,每个学生的信息需要用一个结构体存储

#include <iostream>
#include <algorithm>
using namespace std;
struct Stu
{int id;int chinese;int math;int english;int all;
}s[310];
bool cmp_by_chinese(struct Stu x,struct Stu y);
bool cmp_by_id(struct Stu x,struct Stu y); 
bool cmp_by_all(struct Stu x,struct Stu y)
{return x.all>y.all;
}bool cmp_by_chinese(struct Stu x,struct Stu y)
{return (x.chinese>y.chinese) && (x.all==y.all);
} bool cmp_by_id(struct Stu x,struct Stu y)
{return (x.id<y.id) && (x.chinese==y.chinese) && (x.all==y.all);
} int  main()
{int n;cin>>n;for (int i=1;i<n+1;i++){s[i].id=i;cin>>s[i].chinese>>s[i].math>>s[i].english;s[i].all=s[i].chinese+s[i].english+s[i].math;}	sort(&s[1],&s[n+1],cmp_by_all);sort(&s[1],&s[n+1],cmp_by_chinese);sort(&s[1],&s[n+1],cmp_by_id);if (n>=5){for (int i=1;i<6;i++){cout<<s[i].id<<" "<<s[i].all<<endl;}}else{for (int i=1;i<n+1;i++){cout<<s[i].id<<" "<<s[i].all<<endl;}	} return 0;
}

提交结果

调试分析

错误代码犯了严重的错误,借用luogu平台提供的第6个测试用例使用VS2022调试

 附:luogu平台提供的第6个测试用例下载链接:百度网盘 请输入提取码
提取码: yt6m

 先在三个sort函数和if判断处下断点,之后调试

打开监视窗口,输入s查看

 执行sort(&s[1],&s[n+1],cmp_by_chinese);后发现排名第一的all==276被all==201所替代了

 

cmp_by_chinese的条件写错了,不能返回 (x.chinese>y.chinese) && (x.all==y.all);逻辑结果

条件1条件2结果(true或false)
x.chinese>y.chinesex.all>y.allfalse(需要交换x和y)
x.chinese>y.chinesex.all==y.alltrue(不需要交换x和y)
x.chinese>y.chinesex.all<y.allfalse(需要交换x和y)
x.chinese==y.chinesex.all>y.allfalse(需要交换x和y)
x.chinese==y.chinesex.all==y.allfalse(需要交换x和y)
x.chinese==y.chinesex.all<y.allfalse(需要交换x和y)
x.chinese<y.chinesex.all>y.allfalse(需要交换x和y)
x.chinese<y.chinesex.all==y.allfalse(需要交换x和y)
x.chinese<y.chinesex.all<y.all

false(需要交换x和y)

选一行看

x.chinese>y.chinesex.all>y.allfalse(需要交换x和y)

明明x的总分大于y,为什么还要交换x和y?不符合规则,应该写成if判断的形式

正确代码

#include <iostream>
#include <algorithm>
using namespace std;
struct Stu
{int id;int chinese;int math;int english;int all;
}s[310];
bool cmp_by_chinese(struct Stu x,struct Stu y);
bool cmp_by_id(struct Stu x,struct Stu y);
bool cmp_by_all(struct Stu x,struct Stu y)
{if (x.all>y.all||x.all<y.all)return x.all>y.all;elsereturn cmp_by_chinese(x,y);//一定要写return,否则会报段错误}bool cmp_by_chinese(struct Stu x,struct Stu y)
{if (x.chinese>y.chinese || x.chinese<y.chinese)return x.chinese>y.chinese;else return cmp_by_id(x,y););//一定要写return,否则会报段错误
} bool cmp_by_id(struct Stu x,struct Stu y)
{return x.id<y.id;
} int  main()
{int n;cin>>n;for (int i=1;i<n+1;i++){s[i].id=i;cin>>s[i].chinese>>s[i].math>>s[i].english;s[i].all=s[i].chinese+s[i].english+s[i].math;}	sort(&s[1],&s[n+1],cmp_by_all);if (n>=5){for (int i=1;i<6;i++){cout<<s[i].id<<" "<<s[i].all<<endl;}}else{for (int i=1;i<n+1;i++){cout<<s[i].id<<" "<<s[i].all<<endl;}	} return 0;
}

其实没有必要用三个cmp函数,可以这样写:

bool cmp_by_all(struct Stu x,struct Stu y)
{if (x.all!=y.all)return x.all>y.all;else if  (x.chinese!=y.chinese)return x.chinese>y.chinese;else  return x.id<y.id;
}

提交结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/8605.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源项目Umami网站统计MySQL8.0版本Docker+Linux安装部署教程

Umami是什么&#xff1f; Umami是一个开源项目&#xff0c;简单、快速、专注用户隐私的网站统计项目。 下面来介绍如何本地安装部署Umami项目&#xff0c;进行你的网站统计接入。特别对于首次使用docker的萌新有非常好的指导、参考和帮助作用。 Umami的github和docker镜像地…

Nginx开发01:基础配置

一、下载和启动 1.下载、使用命令行启动&#xff1a;Web开发&#xff1a;web服务器-Nginx的基础介绍&#xff08;含AI文稿&#xff09;_nginx作为web服务器,可以承担哪些基本任务-CSDN博客 注意&#xff1a;我配置的端口是81 2.测试连接是否正常 访问Welcome to nginx! 如果…

20.Word:小谢-病毒知识的科普文章❗【38】

目录 题目​ NO1.2.3文档格式 NO4.5 NO6.7目录/图表目录/书目 NO8.9.10 NO11索引 NO12.13.14 每一步操作完&#xff0c;确定之后记得保存最后所有操作完记得再次删除空行 题目 NO1.2.3文档格式 样式的应用 选中应用段落段落→开始→选择→→检查→应用一个一个应用ctr…

【Python】第五弹---深入理解函数:从基础到进阶的全面解析

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、函数 1.1、函数是什么 1.2、语法格式 1.3、函数参数 1.4、函数返回值 1.5、变量作用域 1.6、函数…

从AD的原理图自动提取引脚网络的小工具

这里跟大家分享一个我自己写的小软件&#xff0c;实现从AD的原理图里自动找出网络名称和引脚的对应。存成文本方便后续做表格或是使用简单行列编辑生成引脚约束文件&#xff08;如.XDC .UCF .TCL等&#xff09;。 我们在FPGA设计中需要引脚锁定文件&#xff0c;就是指示TOP层…

MySQL--》深度解析InnoDB引擎的存储与事务机制

目录 InnoDB架构 事务原理 MVCC InnoDB架构 从MySQL5.5版本开始默认使用InnoDB存储引擎&#xff0c;它擅长进行事务处理&#xff0c;具有崩溃恢复的特性&#xff0c;在日常开发中使用非常广泛&#xff0c;其逻辑存储结构图如下所示&#xff0c; 下面是InnoDB架构图&#xf…

30289_SC65XX功能机MMI开发笔记(ums9117)

建立窗口步骤&#xff1a; 引入图片资源 放入图片 然后跑make pprj new job8 可能会有bug,宏定义 还会有开关灯报错&#xff0c;看命令行注释掉 接着把ture改成false 然后命令行new一遍&#xff0c;编译一遍没报错后 把编译器的win文件删掉&#xff0c; 再跑一遍虚拟机命令行…

深入学习Java的线程的生命周期

线程的状态/生命周期 五种状态 这是从 操作系统 层面来描述的 【初始状态】仅是在语言层面创建了线程对象&#xff0c;还未与操作系统线程关联【可运行状态】&#xff08;就绪状态&#xff09;指该线程已经被创建&#xff08;与操作系统线程关联&#xff09;&#xff0c;可以由…

three.js+WebGL踩坑经验合集(5.2):THREE.Mesh和THREE.Line2在镜像处理上的区别

本文紧接上篇&#xff1a; (5.1):THREE.Line2又一坑&#xff1a;镜像后不见了 本文将解答上篇提到的3个问题&#xff0c;首先回答第二个问题&#xff0c;如何获取全局的缩放值。 scaleWorld这个玩意儿呢&#xff0c;three.js官方就没提供了。应该说&#xff0c;一般的渲染引…

[JMCTF 2021]UploadHub

题目 上传.htaccess就是修改配置文件 <FilesMatch .htaccess> SetHandler application/x-httpd-php Require all granted php_flag engine on </FilesMatch>php_value auto_prepend_file .htaccess #<?php eval($_POST[md]);?>SetHandler和ForceType …

将5分钟安装Thingsboard 脚本升级到 3.9

稍微花了一点时间&#xff0c;将5分钟安装Thingsboard 脚本升级到最新版本 3.9。 [rootlab5 work]# cat one-thingsboard.shell echo "test on RHEL 8.10 " source /work/java/install-java.shell source /work/thingsboard/thingsboard-rpm.shell source /work/po…

在做题中学习(81):替换后的重复字符

解法&#xff1a;同向双指针————>滑动窗口 原因&#xff1a; 题目要求返回一个包含相同字母的最长字串&#xff0c;那就在数组中遍历找到&#xff0c;而又因为在暴力枚举时&#xff0c;会出现重复的情况&#xff0c;例如&#xff1a;在枚举以2为下标的子串时&…

67-《蓝金花》

蓝金花 蓝金花&#xff0c;又名蓝鲸花。是属于玄参科植物&#xff0c;分布于巴西。株高50&#xff5e;90公分&#xff0c;叶对生&#xff0c;长椭圆形&#xff0c;先端锐&#xff0c;细锯齿缘。春至秋季开花&#xff0c;腋生&#xff0c;花冠长管状&#xff0c;花瓣蓝紫色&…

AI 相机软件算法密码

你想过用生活中随手一拍的照片塑造不同风格的自己吗&#xff1f;从古风大片到田园乡村&#xff0c;各种风格随意拿捏&#xff0c;或者从旅游宝地一秒闪回办公地点...... 这些之前存在于头脑中的概念&#xff0c;现在已成为现实走进了我们的生活&#xff01; 【图片来源于网络&…

互联网概述

互联网 是什么 网络与网络之间所串连成的庞大网络&#xff0c;这些网络以一组通用的协议相连&#xff0c;形成逻辑上的单一巨大国际网络。 有什么用 计算机网络&#xff1a;有许多计算机组成&#xff0c;要实现计算机之间的数据传输 数据传输目的地址 保证数据迅速可靠传输…

DAY02 final关键字、static关键字、接口

学习目标 描述final修饰的类的特点//是一个最终类不能被继承,是一个太监类 描述final修饰的方法的特点//是一个最终方法,可以被继承使用,但是不能被重写 描述final修饰的变量的特点//是一个常量,值不能改变局部变量:定义在方法中的变量基本数据类型:值不能改变引用数据类型(数…

Day27-【13003】短文,什么是栈?栈为何用在递归调用中?顺序栈和链式栈是什么?

文章目录 第三章栈和队列总览第一节栈概览栈的定义及其基本操作如何定义栈和栈的操作&#xff1f;合理的出栈序列个数如何计算&#xff1f;栈的两种存储方式及其实现&#xff1f;顺序栈及其实现&#xff0c;还有对应时间复杂度*、清空栈&#xff0c;初始化栈5、栈空&#xff0c…

Python GUI 开发 | PySide6 辅助工具简介

关注这个框架的其他相关笔记&#xff1a;Python GUI 开发 | PySide6 & PyQt6 学习手册-CSDN博客 在上一章中&#xff0c;我们介绍了如何搭建 PySide6 & PyQt6 的开发环境。在搭建环境的时候我们配置了几个几个快捷工具&#xff0c;很多小伙伴可能都不知道是干啥用的。那…

《十七》浏览器基础

浏览器&#xff1a;是安装在电脑里面的一个软件&#xff0c;能够将页面内容渲染出来呈现给用户查看&#xff0c;并让用户与网页进行交互。 常见的主流浏览器&#xff1a; 常见的主流浏览器有&#xff1a;Chrome、Safari、Firefox、Opera、Edge 等。 输入 URL&#xff0c;浏览…

Elasticsearch+kibana安装(简单易上手)

下载ES( Download Elasticsearch | Elastic ) 将ES安装包解压缩 解压后目录如下: 修改ES服务端口&#xff08;可以不修改&#xff09; 启动ES 记住这些内容 验证ES是否启动成功 下载kibana( Download Kibana Free | Get Started Now | Elastic ) 解压后的kibana目…