当前位置: 首页 > news >正文

分班问题 、幼儿园分班(C语言)

题目

幼儿园两个班的小朋友排队时混在了一起,每个小朋友都知道自己跟前面一个小朋友是不是同班,请你帮忙把同班的小朋友找出来
小朋友的编号为整数,与前面一个小朋友同班用Y表示,不同班用N表示

输入

输入为空格分开的小朋友编号和是否同班标志
比如 6/N 2/Y 3/N 4/Y
表示一共有4位小朋友
26是同班,32不同班,43同班
小朋友总数不超过999
0 < 每个小朋友编号 < 999
不考虑输入格式错误

输出

每一行记录一班小朋友的编号 编号用空格分开
并且

  1. 编号需要按照大小升序排列,分班记录中第一个编号小的排在第一行
  2. 如果只有一个班的小朋友 第二行为空
  3. 如果输入不符合要求输出字符串ERROR

示例一

输入

1/N 2/Y 3/N 4/Y
1

输出

1 2
3 4
12

说明

2的同班标记为Y因此和1同班
3的同班标记位N因此和1,2不同班
4的同班标记位Y因此和3同班

示例二

输入

1/N 2/Y 3/N 4/Y 5/Y

输出

1 2
3 4 5

思路

解题思路:

  1. 读取输入:首先通过fgets函数获取用户输入的一行字符串,然后使用strtok函数将其按照空格分割成一个个包含编号和是否同班标志的token(例如:“1/N”、"2/Y"等),并将这些token存入临时数组中。

  2. 初始化学生结构体数组:根据临时数组中的信息,利用sscanf函数将每个token解析为小朋友的编号(id)和是否同班(isClass)标志,并存储到Students结构体数组stu中。

  3. 判断首位合法性:检查首位小朋友是否与前一位小朋友同班。由于没有前一位小朋友,若首位标记为“Y”,则输入非法,输出"ERROR"并结束程序。

  4. 分配班级:遍历整个stu数组,对于每个小朋友:

    • 首位小朋友直接划归到班级1;
    • 若当前小朋友与前一位小朋友同班,则将其划归到前一位所在的班级;
    • 若当前小朋友与前一位小朋友不同班,则将其划归到另一个班级。

    在这个过程中,用两个整数数组class1class2分别记录两个班级的小朋友编号。

  5. 排序输出:对两个班级数组进行升序排序,这里使用C标准库提供的qsort函数进行快速排序。最后分别输出两个班级的小朋友编号,每个编号后面跟一个空格,第二个班级结束后输出换行符。

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 1000// 定义学生结构体,包含小朋友编号(id)、是否同班标志(isClass)以及所在班级(classId)
typedef struct {int id;char isClass[2];int classId; // 表示小朋友属于一班还是二班
} Students;// 自定义排序函数,用于对整数数组进行升序排序
int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; }int main() {char input[3000]; // 输入缓冲区,用于存储用户输入的数据// 读取一行用户输入,并移除末尾换行符fgets(input, 3000, stdin);input[strcspn(input, "\n")] = '\0';// 使用strtok函数分割输入字符串为一个个token(小朋友编号和是否同班标志)char *token = strtok(input, " ");char tmp[MAX][10]; // 临时存储每个tokenint count = 0;     // 记录当前读取到的token数量while (token != NULL) {strcpy(tmp[count++], token); // 将token复制到临时数组中token = strtok(NULL, " ");   // 继续获取下一个token}// 初始化学生结构体数组,并将读取到的信息存入其中Students stu[MAX];for (int i = 0; i < count; i++) {sscanf(tmp[i], "%d/%s", &stu[i].id, stu[i].isClass);}// 检查首位小朋友是否与前一位小朋友同班(实际上没有前一位),若同班则输入非法,输出ERRORif (strcmp(stu[0].isClass, "Y") == 0) {printf("ERROR\n");return 0;}// 定义两个数组分别存储两个班级的小朋友编号int class1[MAX], class2[MAX];int count1 = 0, count2 = 0; // 分别记录两个班级的人数// 遍历所有小朋友信息,根据是否同班标志将他们分配到对应的班级数组中for (int i = 0; i < count; i++) {// 处理首位小朋友if (i == 0) {class1[count1++] = stu[i].id;stu[i].classId = 1; // 设置班级ID为1continue;}// 若当前小朋友与前一位小朋友同班,则将其划分到同一班级if (strcmp(stu[i].isClass, "Y") == 0) {stu[i].classId = stu[i - 1].classId;// 根据班级ID将小朋友编号添加到对应的班级数组中if (stu[i].classId == 1) {class1[count1++] = stu[i].id;} else if (stu[i].classId == 2) {class2[count2++] = stu[i].id;}}// 若当前小朋友与前一位小朋友不同班,则将其划分到另一个班级if (strcmp(stu[i].isClass, "N") == 0) {// 更新当前小朋友的班级ID,使其与前一位小朋友所在的班级不同if (stu[i - 1].classId == 1) {stu[i].classId = 2;} else if (stu[i - 1].classId == 2) {stu[i].classId = 1;}// 根据更新后的班级ID将小朋友编号添加到对应的班级数组中if (stu[i].classId == 1) {class1[count1++] = stu[i].id;} else if (stu[i].classId == 2) {class2[count2++] = stu[i].id;}}}// 对两个班级数组分别进行升序排序qsort(class1, count1, sizeof(int), cmp);qsort(class2, count2, sizeof(int), cmp);// 输出两个班级的小朋友编号,每个编号后面跟一个空格for (int i = 0; i < count1; i++) {printf("%d ", class1[i]);}printf("\n"); // 换行输出第二个班级for (int i = 0; i < count2; i++) {printf("%d ", class2[i]);}return 0;
}

文章目录

    • 题目
    • 输入
    • 输出
    • 示例一
      • 输入
      • 输出
      • 说明
    • 示例二
      • 输入
      • 输出
    • 思路
    • 代码

相关文章:

分班问题 、幼儿园分班(C语言)

题目 幼儿园两个班的小朋友排队时混在了一起&#xff0c;每个小朋友都知道自己跟前面一个小朋友是不是同班&#xff0c;请你帮忙把同班的小朋友找出来 小朋友的编号为整数&#xff0c;与前面一个小朋友同班用Y表示&#xff0c;不同班用N表示 输入 输入为空格分开的小朋友编号…...

QT 如何让多语言翻译变得简单,提高效率?

一.QT多语言如何翻译的? 在QT的多语言翻译过程中,分为两个步骤:第一步生成ts文件,第二步将ts文件翻译为qm文件。如果我们在需要多语言的情况下,qml经常使用qstr或者qwidget中使用tr等等,遍布许多个文件夹,在需要更新新的翻译时会很麻烦。整个工程收索并修改,效率十分低…...

线性代数:线性方程组解的结构

目录 齐次/非齐次方程组的解 Ax 0 的解的性质 定理 Ax b 的解的性质 相关证明 例1 例2 例3 齐次/非齐次方程组的解 Ax 0 的解的性质 定理 Ax b 的解的性质 相关证明 例1 例2 例3...

mysql之CRUD常见函数union查询

select select * from c insert 字段设置自增后&#xff0c;当我们指定增加一条数据后&#xff0c;往后增加的数据都会在该条数据后进行递增&#xff0c;但是可以认为的指定增加某条id不存在的数据 insert into c values(7,‘政治’) insert into c(c2) values(‘历史1’),(…...

开窗函数实践-实现两行记录之间计算时间差

一、需求背景 基于保密要求&#xff0c;不放原始表&#xff0c;新建测试表用来演示 insert into TEST0221 (采血人, 采血时间, 条码号, 病人ID) values (张三, to_date(21-02-2024 12:00:00, dd-mm-yyyy hh24:mi:ss), 2024001, 0001);insert into TEST0221 (采血人, 采血时间…...

String字符串的常见方法总结

目录 一、int length():返回字符串的长度 二、char charAt(int index):返回某索引处的字符 三、boolean isEmpty()&#xff1a;判断字符串是否为空 四、String toUpperCase():将字符转换成大写 五、String toLowerCase():将字符转换成小写 六、String trim():去除首尾空白…...

Postgresql源码(122)Listen / Notify与事务的联动机制

前言 Notify和Listen是Postgresql提供的不同会话间异步消息通信功能&#xff0c;例子&#xff1a; LISTEN virtual; NOTIFY virtual; Asynchronous notification "virtual" received from server process with PID 8448. NOTIFY virtual, This is the payload; Asy…...

QT 数据库的增加操作和画图 Win

第一步、先配置CMakeLists.txt 在CMakeLists.txt中添加 find_package(Qt6 REQUIRED COMPONENTS Sql) find_package(Qt6 REQUIRED COMPONENTS Charts)target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Sql) target_link_libraries(${PROJECT_NAME} PRIVATE Qt6::Charts)避…...

【JS逆向学习】同花顺(q.10jqka)补环境

逆向目标 目标网址&#xff1a;https://q.10jqka.com.cn/ 目标接口&#xff1a; https://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/3/ajax/1/ 目标参数&#xff1a;cookie 逆向过程 老规矩&#xff0c;先分析网络请求&#xff0c;发现是 cookie 加…...

解决MobaXterm网络错误连接超时问题

报错页面&#xff1a; 报错原因&#xff1a; ①网络断开了 ②网络端口&#xff0c;端口号改变 解决办法&#xff1a; ①重新连接网络按R ②固定端口号 第一步&#xff1a;编辑------>虚拟机网络编辑器&#xff08;我的Linux在虚拟机里&#xff09; 第二步&#xff1a;用…...

突发!AI独角兽「竹间智能」被曝停工停产6个月

大家好我是二狗。 今天早上起来刷朋友圈&#xff0c;看到一张截图——AI创企竹间智能&#xff0c;宣称因为公司所处的经营环境艰难&#xff0c;部分部门和岗位将从即日起停工停产6个月。 图源&#xff1a;&#xff08;企服科学&#xff09; 下面是文字版&#xff1a; 由于公司…...

Qt应用软件【协议篇】GPIO控制LED灯

GPIO简介 GPIO(General Purpose Input/Output,通用输入输出)是一种通用的端口定义,在各种计算机、嵌入式系统和微控制器中广泛应用。通过GPIO,计算机或微控制器可以与外部世界进行交互,例如读取传感器数据或控制外部设备(如LED灯、电机等)。 GPIO的应用场景 按钮和开…...

vulfocus靶场搭建

vulfocus靶场搭建 什么是vulfocus搭建教程靶场配置场景靶场编排靶场优化 什么是vulfocus Vulfocus 是一个漏洞集成平台&#xff0c;将漏洞环境 docker 镜像&#xff0c;放入即可使用&#xff0c;开箱即用&#xff0c;我们可以通过搭建该靶场&#xff0c;简单方便地复现一些框架…...

Swift基础知识:30.Swift访问控制

在 Swift 中&#xff0c;访问控制&#xff08;Access Control&#xff09;是一种用于限制代码模块对其他代码模块的访问权限的机制。通过访问控制&#xff0c;可以控制代码中各个部分的可见性和可访问性&#xff0c;以便于提高代码的安全性、可维护性和可复用性。 访问级别 S…...

ElasticSearch聚合操作

目录 ElasticSearch聚合操作 基本语法 聚合的分类 后续示例数据 Metric Aggregation Bucket Aggregation ES聚合分析不精准原因分析 提高聚合精确度 ElasticSearch聚合操作 Elasticsearch除搜索以外&#xff0c;提供了针对ES 数据进行统计分析的功能。聚合(aggregation…...

普中51单片机学习(定时器和计数器)

定时器和计数器 51单片机有两组定时器/计数器&#xff0c;因为既可以定时&#xff0c;又可以计数&#xff0c;故称之为定时器/计数器。定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的&#xff0c;不需要CPU的参与。51单片机中的定时器/计数器是…...

having子句

目录 having子句 having和where的区别 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 现在要求查询出每个职位的名称&#xff0c;职位的平均工资&#xff0c;但是要求显示平均工资高于 200 的职位 按照职位先进行分组&#xff0c;同…...

STM32H7 系列 MCU 内部 SRAM

通过参看《STM32H7 参考手册》“2.4 Embedded SRAM”章节知道 The STM32H743/53xx and STM32H750xB 内存特性: Up to 864 Kbytes of System SRAM 128 Kbytes of data TCM RAM 64 Kbytes of instruction TCM RAM 4 Kbytes of backup SRAM 1.1 TCM SRAM TCM : Tightly-Coupled …...

备战蓝桥杯---动态规划(应用2(一些十分巧妙的优化dp的手段))

好久不见&#xff0c;甚是想念&#xff0c;最近一直在看过河这道题&#xff08;感觉最近脑子有点宕机QAQ&#xff09;&#xff0c;现在算是有点懂了&#xff0c;打算记录下这道又爱又恨的题。&#xff08;如有错误欢迎大佬帮忙指出&#xff09; 话不多说&#xff0c;直接看题&…...

从 git 分支中合并特定文件,而不是整个分支的内容

问题 在git 中&#xff0c;我们可以使用 git merge 命令&#xff0c;合并整个分支&#xff0c;覆盖当前分支的内容&#xff0c;但是有时候我们并不想这么做&#xff0c;而是想 merge 某个文件。那么下面提供两种办法。 方法一 使用 git checkout&#xff0c;从别的分支&#x…...

pycharm 远程运行报错 Failed to prepare environment

什么也没动的情况下&#xff0c;远程连接后运行是没问题的&#xff0c;突然在运行时就运行不了了&#xff0c;解决方案 清理缓存&#xff1a; 有时候 PyCharm 的内部缓存可能出现问题&#xff0c;可以尝试清除缓存&#xff08;File > Invalidate Caches / Restart&#xff0…...

(十二)【Jmeter】线程(Threads(Users))之setUp 线程组

简述 操作路径如下: 作用:在正式测试开始前执行预加载或预热操作,为测试做准备。配置:设置预加载或预热操作的采样器、循环次数等参数。使用场景:确保在正式测试开始前应用程序已经达到稳定状态,减少测试结果的偏差。优点:提供预加载或预热操作,确保测试的准确性。缺…...

代码随想录算法训练营第二十五天|216.组合总和III,17.电话号码的字母组合

目录 216.组合总和II 17.电话号码的字母组合 216.组合总和II 如果把 组合问题理解了&#xff0c;本题就容易一些了。 题目链接/文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;和组合问题有啥区别&#xff1f;回溯算法如何剪枝&#xff1f;| LeetCode&#xff1a;216.…...

c#创建安装windows服务

背景:最近在做设备数据对接采集时,遇到一些设备不是标准的Service-Client接口,导致采集的数据不够准确;比如设备如果中途开关机后,加工的数量就会从0开始重新计数,因此需要实时监控设备的数据,进行叠加处理;考略到工厂设备比较多,实时监听接口的数据为每秒3次,因此将…...

【JVM】打破双亲委派机制

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;JVM ⛺️稳中求进&#xff0c;晒太阳 打破双亲委派机制 打破双亲委派机制三种方法 自定义类加载器 ClassLoader包含了四个核心方法 //由类加载器子类实现&#xff0c;获取二进制数据调用…...

程序员要了解的AI基本知识

一.AI从业人员的三个层次 AI从业人员的层次是不同的&#xff0c;所以需要的知识面也是不同的。下面大致给出了3个层面。 1.学术研究者 他们的工作是从理论上诠释机器学习的各个方面&#xff0c;试图找出“这样设计模型/参数为什么效果更好”&#xff0c;并且为其他从业者提供…...

306_C++_QT_创建多个tag页面,使用QMdiArea容器控件,每个页面都是一个新的表格[或者其他]页面

程序目的是可以打开多个styles文件(int后缀文件),且是tag样式的(就是可以切多个页面出来,并且能够单独关闭);其中读取ini文件,将其插入到表格中的操作,也是比较复杂的,因为需要保持RGB字符串和前面的说明字符串对齐 ini文件举例: [MainMenu] Foreground\Selected=&…...

OpenCV笔记3:级联分类器实现人脸检测+绘制logo

OpenCV 人脸检测绘制logo 检测人脸绘制人脸区域绘制logo 寻找轮廓 二值图阈值 绘制轮廓 """ 绘制logo 1. 检测人脸区域如何检测到人脸眼睛、鼻子、嘴巴、眉毛、下巴等级联的过程OpenCV、Mediapipe、YOLOFace、DBFace等 2. 把logo粘贴在人脸上方 ""…...

python---Pixiv排行榜图片获取(2024.2.16)

1.提示&#xff1a; 使用需要安装各种import的包&#xff0c;都是很基础的包&#xff0c;直接安装即可。 自备梯子 。 切记把userid和cookie改为自己账号的参数&#xff01; userid就是点击pixiv头像&#xff0c;网址后面一串数&#xff0c; cookie是打开排行榜后&#xff0c;…...

QT3作业

1 2. 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数&#xff0c;将登录按钮使用t5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#…...