C语言PTA练习题(期末考试成绩排名,新生舞会,约瑟夫游戏(序号+姓名+密码),排队点名)

7-1 期末考试成绩排名

期末考试结束了,数学成绩已经出来,数学老师请你帮忙编写一个程序,可以帮助老师对班级所有同学的考试分数按照由高到第低进行排序,并输出按照成绩排序后每个同学的学号、姓名、数学成绩。

输入格式:

第一行是一个整数n(n<=100),代表班级的总人数。

接下来n行,每行有3个数据,第一个数据是某个同学的学号(整数),第二个数据是该同学的姓名的拼音(拼音不含空格,不超出20个字符),第三个数据是该同学的数学成绩(成绩是整数)

输出格式:

按照数学成绩由高到低输出每个同学的学号、姓名、数学成绩,每行含1个同学的3个数据,3个数据用空格隔开。(如果出现多个同学数学成绩相同,则按照学号由小到大输出,不存在多个同学学号相同的情况)。

输入样例:

在这里给出一组输入。例如:

3
1 zhangfang 98
2 liming 100
3 sunhua 99

输出样例:

在这里给出相应的输出。例如:

2 liming 100
3 sunhua 99
1 zhangfang 98
#include <stdio.h>
#include <stdlib.h>
#include <string.h>// 定义学生结构体
typedef struct {int id;char name[21];int score;
} Student;// 比较函数,用于 qsort 排序
int compare(const void *a, const void *b) {const Student *student1 = (const Student *)a;const Student *student2 = (const Student *)b;// 首先按照成绩降序排序,成绩相同时按照学号升序排序if (student1->score != student2->score) {return student2->score - student1->score;} else {return student1->id - student2->id;}
}int main() {int n;scanf("%d", &n);// 分配动态内存来存储学生数组Student *students = (Student *)malloc(n * sizeof(Student));// 输入学生信息for (int i = 0; i < n; i++) {scanf("%d %s %d", &students[i].id, students[i].name, &students[i].score);}// 使用 qsort 函数对学生数组进行排序qsort(students, n, sizeof(Student), compare);// 输出排序后的学生信息for (int i = 0; i < n; i++) {printf("%d %s %d\n", students[i].id, students[i].name, students[i].score);}// 释放动态分配的内存free(students);return 0;
}

7-2 新生舞会

新生舞会开始了。n名新生每人有三个属性:姓名、学号、性别。其中,姓名用长度不超过20的仅由大小写字母构成的字符串表示,学号用长度不超过10的 仅由数字构成的字符串表示,性别用一个大写字符‘F’或‘M’表示。任意两人的姓名、学号均互不相同。换言之,每个人可被其姓名或学号唯一确定。

给出m对两人的信息(姓名或学号),判断他们是否能共舞。两人能共舞的充要条件为两人性别相异。

输入格式:

第一行一个整数n(2<=n<=1000),表示学生人数。接下来的n行每行依次包含一名新生的姓名、学号、性别,分别用一个空格隔开。

之后的一行是一个整数m(1<=m<=1000),表示询问的数目。接着的m行每行包含两个信息(姓名或学号),保证两个信息不属于同一人,中间用一个空格隔开。

输出格式:

对于每个询问输出一行,如果两人可以共舞,输出一个大写字母‘Y’,否则输出一个大写字母‘N’。

输入样例:

在这里给出一组输入。例如:

4
John 10 M
Jack 11 M
Kate 20 F
Jim 21 M
3
John 11
20 Jack
Jim Jack

输出样例:

在这里给出相应的输出。例如:

N
Y
N
#include <stdio.h>
#include <string.h>// 定义学生结构体
typedef struct {char name[21];char id[11];char gender;
} Student;int main() {int n;scanf("%d", &n);// 定义学生数组Student students[n];// 输入学生信息for (int i = 0; i < n; i++) {scanf("%s %s %c", students[i].name, students[i].id, &students[i].gender);}int m;scanf("%d", &m);// 处理每个询问for (int i = 0; i < m; i++) {char info1[21], info2[21];scanf("%s %s", info1, info2);char gender1, gender2;int found1 = 0, found2 = 0;// 查找第一个信息对应的学生的性别for (int j = 0; j < n; j++) {if ((strcmp(info1, students[j].name) == 0) || (strcmp(info1, students[j].id) == 0)) {gender1 = students[j].gender;found1 = 1;break;}}// 查找第二个信息对应的学生的性别for (int j = 0; j < n; j++) {if ((strcmp(info2, students[j].name) == 0) || (strcmp(info2, students[j].id) == 0)) {gender2 = students[j].gender;found2 = 1;break;}}// 判断两个学生是否能共舞if (found1 && found2) {if (gender1 != gender2) {printf("Y\n");} else {printf("N\n");}}}return 0;
}

7-3 约瑟夫游戏(序号+姓名+密码)

编号为1、2、3、...、N的N个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。从指定编号为1的人开始,他的密码为M的初始值,按顺时针方向从1号自己开始顺序报数,报到指定数M时停止报数,报M的人出列,并将他的密码作为新的M值,从他在顺时针方向的下一个人开始,重新从1报数,报到M的人出列;出列人的密码作为下一轮报数的值。依此类推,直至所有的人全部出列为止。请设计一个程序求出出列的顺序,人数N及每个人的姓名、密码值从键盘输入。

输入格式:

输入2行。

第1行为一个正整数N(2≤N≤30),表示参与游戏的人数。

接下来N行,每行输入,游戏人的的姓名(英文字符,长度不超出20,无空格)和密码M(1≤M≤10)。

第后一行输入开始游戏的初始密码。

输出格式:

按出列顺序依次输出所有游戏者的编号,用空格隔开。

输入样例:

在这里给出一组输入。例如:

4
One 1
Two 3
Three 3
Four 2
2

输出样例:

在这里给出相应的输出。例如:

2 Two
1 One
3 Three
4 Four
#include<stdio.h>
#define N 40
struct People{char name[20];int num;
}peo[N];
int con[N];
int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s %d",peo[i].name,&peo[i].num);}int m;scanf("%d",&m);int count=1;int idex=1;while(count<n){for(int i=1;i<=n;i++){if(con[i]){continue;}if(idex==m&&con[i]==0){count++;idex=1;con[i]=1;printf("%d %s\n",i,peo[i].name);m=peo[i].num;}else if(con[i]==0){idex++;}}}for(int i=1;i<=n;i++){if(con[i]==0){printf("%d %s\n",i,peo[i].name);}}return 0;
}

7-4 排队点名

小X和他的同学们正在上体育课,一共有n位学生编号为1~n,他们已经在操场上排成了一列,这个时候体育老师来了,他觉得他们排成的队伍存在着一些瑕疵,于是按顺序进行了m次点名:

每次点名会点到一个编号为bi的学生,于是这名学生就会出列并站到队伍的最前面(即最左端),原本在编号为bi前的学生会自动后退一个位置。然后在移动好的队伍上进行下一次点名。

现在,给定初始队列和m次点名的编号,小X想知道点完名后队伍变成了什么样。

输入格式:

第一行一个整数n,表示学生的人数。

第二行n个整数ai,表示学生的编号,保证ai为长度为n的排列。

第三行一个整数m,表示点名的次数。

第四行m个整数bi,表示每次点到的学生的编号。

【数据范围及约定】

1≤n,m≤10^5,1≤ai,bi≤n,且序列a为长度为n的排列。

输出格式:

一行n个整数,用空格隔开,表示点完名后的队伍(输出的最后不能有多余空格)。

输入样例:

在这里给出一组输入。例如:

6
6 5 4 3 2 1
4
2 4 2 5

输出样例:

在这里给出相应的输出。例如:

5 2 4 6 3 1

样例解释:

一共4次点名,

第一次点名点到2,队伍之后变成了2 6 5 4 3 1

第二次点名点到4,队伍之后变成了4 2 6 5 3 1

第三次点名点到2,队伍之后变成了2 4 6 5 3 1

第四次点名点到5,队伍之后变成了5 2 4 6 3 1

#include<stdio.h>
#define N 100050
int list[N][2];
int num[N];
int list2[N];
int main()
{int n;scanf("%d",&n);for(int i=1;i<=n;i++){int j;scanf("%d",&j);list[j][0]=1;list[j][1]=i;}int m;scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%d",&num[i]);}int count=0;for(int i=m;i>=1;i--){if(list[num[i]][0]){list[num[i]][0]=0;printf("%d ",num[i]);count++;}}for(int i=1;i<=n;i++){if(list[i][0]){list2[list[i][1]]=i;}}int count1=1;for(int i=1;i<=n;i++){if(list2[i]&&count1<n-count){printf("%d ",list2[i]);count++;}else if(list2[i]){printf("%d\n",list2[i]);break;}}return 0;
}

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

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

相关文章

Vue.js的核心概念:如何理解Vue.js的声明式渲染、组件系统、Vue实例、Vue生命周期等核心概念。

介绍Vue.js Vue.js的由来 Vue.js是由前Google工程师尤雨溪(Evan You)在2014年开发并发布的。尤雨溪在Google任职期间,主要使用AngularJS进行开发工作,但他觉得AngularJS有些部分过于复杂,因此他决定开发一个轻量且更易于理解的库,这就是Vue.js的诞生。 Vue.js的特点 …

计算机网络学习2

文章目录 信道复用技术 第三章数据链路层概述数据链路层的三个重要问题封装成帧和透明传输差错检测可靠传输的相关基本概念可靠传输的实现机制停止等待协议回退N帧协议选择重传协议 点对点协议PPP共享式以太网网络适配器和MAC地址CSMA_CD协议的基本原理共享式以太网的争用期共享…

备战十一届大唐杯国赛预选赛

这次省赛带了太多个省一了&#xff0c;具体可看下面的图片&#xff0c;只放了一部分。目前根据可靠消息&#xff0c;应该还有个预选赛和去年一样&#xff0c;就是还会考一次仿真。如果说通过了就是国二起步然后去北方工业争夺国一国二&#xff0c;没过的话就是国三。 每…

<MySQL> 表的增删改查 - 基本查询

目录 前言&#xff1a; 一、表的插入 &#xff08;一&#xff09;指定列插入和多行插入 &#xff08;二&#xff09;全列插入 &#xff08;三&#xff09;插入选择更新 &#xff08;四&#xff09;替换数据 二、表中的数据查询 &#xff08;一&#xff09;select查询语…

【SQL学习进阶】从入门到高级应用【三范式】

文章目录 什么是数据库设计三范式三范式一对多怎么设计多对多怎么设计一对一怎么设计最终的设计 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f495;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01; &#x1f495;希望您在这里可以感受到一份…

sql注入-布尔盲注

布尔盲注&#xff08;Boolean Blind SQL Injection&#xff09;是一种SQL注入攻击技术&#xff0c;用于在无法直接获得查询结果的情况下推断数据库信息&#xff1b;它通过发送不同的SQL查询来观察应用程序的响应&#xff0c;进而判断查询的真假&#xff0c;并逐步推断出有用的信…

低代码选型要注意什么问题?

低代码选型时&#xff0c;确实需要从多个角度综合考虑&#xff0c;以下是根据您给出的角度进行的分析和建议&#xff1a; 公司的人才资源&#xff1a; 评估团队中是否有具备编程能力的开发人员&#xff0c;以确保能够充分利用低代码平台的高级功能和进行必要的定制开发。考察实…

告别繁琐SQL,4K星开源神器让数据库管理像聊天一样简单!

大家好&#xff0c;今天我要给大家介绍一个超级棒的开源项目——SQL Chat。如果你是一名开发者&#xff0c;数据库管理员&#xff0c;或者对数据分析感兴趣&#xff0c;那你绝对不能错过这个神器。SQL Chat&#xff0c;一个近4K星的GitHub项目&#xff0c;它将彻底改变你与数据…

本地安装AI大模型

使用ollmam安装llmama3等模型 1.打开ollmam下载对应系统的软件&#xff0c;安装即可 官网&#xff1a;Ollama&#xff0c; 安装直接点就就行了&#xff0c;没有其他操作 2.安装模型 在官网找到对于的模型下载命令 记录命令:ollama run llama3 打开一个cmd窗口&#xff0c;输…

【已解决】HtmlWebpackPlugin.getHooks is not a function

安装下面的依赖&#xff0c;获得 html-webpack-plugin 的 beta 版本 npm i html-webpack-pluginnext --save此问题在github上有讨论&#xff1a;https://github.com/facebook/create-react-app/issues/5465

【UE5.1 角色练习】09-物体抬升、抛出技能 - part1

前言 在上一篇&#xff08;【UE5.1 角色练习】08-传送技能&#xff09;的基础上继续实现控制物体抬升、抛出的功能。 效果 步骤 一、准备技能动画 1. 在项目设置中新建一个操作映射&#xff0c;这里命名为“Skill_GravityControl”&#xff0c;用按键4触发 2. 通过IK重定向…

PyTorch学习(10):torch.where

PyTorch学习&#xff08;1&#xff09;&#xff1a;torch.meshgrid的使用-CSDN博客 PyTorch学习&#xff08;2&#xff09;&#xff1a;torch.device-CSDN博客 PyTorch学习&#xff08;9&#xff09;&#xff1a;torch.topk-CSDN博客 目录 1. 写在前面 2. torch.where 函数概…

【算法设计与分析】基于Go语言实现贪心法解决TSP问题

一、前言 本文以上文动态规划法为基础按照相似的输入来完成编程。 二、代码思路 因为是贪心法&#xff0c;直接去找离目前正在遍历的点最近的点&#xff0c;因此输入了一个二维矩阵&#xff0c;咱们还需要设置一个一维数组来存/检验是否遍历过点&#xff0c;遍历过就不要再算了…

CentOS开启ftp并使用filezilla连接

1. 安装vsftpd sudo yum install vsftpd -y 2. 启动ftp服务 service vsftpd start 3. 加入开机启动 chkconfig vsftpd on 4. 开启端口 sudo firewall-cmd --zonepublic --add-port21/tcp --permanent 5. 重启防火墙 sudo firewall-cmd --reload 6. 查询有哪些端口是开…

git远程仓库限额的解决方法——大文件瘦身

Git作为世界上最优秀的分布式版本控制工具&#xff0c;也是优秀的文件管理工具&#xff0c;它赋予了项目成员对项目进行远程协同开发能力&#xff0c;因此受到越来越多的行业从业人员的喜爱。很多优秀的项目管理平台&#xff0c;比如国内的Gitee&#xff0c;国外的Github&#…

MySQL 一条SQL查询/更新语句是如何执行的?

MySQL 一条SQL查询语句是如何执行的&#xff1f; 1 连接器 首先客户端需要先跟服务端进行连接 2 查询缓存 MySQL 5.7 以及之前的版本会查询MySQL缓存&#xff0c;存储是键值对形式的 分析器 对SQL进行词法分析【会生成词法树】以及语法分析 词法分析&#xff1a; 主要负…

华为OD刷题C卷 - 每日刷题 4

1、&#xff08;罗马数字转整数&#xff09;&#xff1a; 这段代码是解决“罗马数字转整数”的问题。它提供了一个Java类Solution&#xff0c;其中包含一个方法romanToInt&#xff0c;该方法接收一个表示罗马数字的字符串s&#xff0c;并将其转换为整数。 代码中首先定义了一…

联想R9000p游戏本常用快捷键

运行模式 Fn Q 切换运行模式&#xff08;蓝色安静&#xff0c;白色均衡&#xff0c;红色野兽&#xff09; 大L信仰灯 Fn L 开关屏幕上盖大Y信仰灯 屏幕帧率 Fn R切换屏幕帧率 键盘灯 Fn R开关键盘灯 音量 Fn F1开关静音 Fn F2 音量 -Fn F3音量 麦克风 Fn …

社交媒体数据恢复:淘宝旺信

根据搜索结果&#xff0c;阿里旺旺聊天记录的恢复方法如下&#xff1a; 运行阿里旺旺在旺旺面板底部点击小喇叭图标在打开的消息管理器窗口右上角点击"搜索"点击"高级搜索"设置所需查找的时间段---"搜索" 此外&#xff0c;在阿里旺旺的云存储中…

8岁儿童学编程基础好吗:探索早期编程教育的利与弊

8岁儿童学编程基础好吗&#xff1a;探索早期编程教育的利与弊 在数字化快速发展的今天&#xff0c;编程技能已成为一项重要的能力。许多家长开始思考&#xff0c;是否应该让8岁的孩子学习编程基础。这个问题看似简单&#xff0c;实则涉及多个层面的考量。下面&#xff0c;我们…