BUAA排座位(简)a

这篇博客介绍了一个使用C语言解决的问题,即检查并修正一个班级期末考试的座位安排,确保没有漏排和重复。通过读取按学号排序的座位信息,程序首先按座位号排序,然后检查并修复漏排和重复座位,最后按照学号重新排序并输出到文件。样例展示了如何处理座位号漏排和重排的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题描述】某班级要进行期末考试,准备考试时打乱座次,现已按照学号顺序人工为学生随机安排了座位号,但其中可能会出现漏排和重复安排座位的情况。编写程序读入人工安排的考试座位安排表T1,对安排情况进行检查,并对漏排和重复安排座位的情况进行修正,修正后,若学生人数为N,则每位学生考试座位安排应在1~N之间,其中没有缺号和重号。假设T1中学号信息不会出现重复,同一座位号最多有两位同学的座位号相同,并且座位号不会连续漏排;初始考试座位安排表存放在当前目录下的in.txt中,其中包括每位学生的学号、姓名和座位号,要求修正后的考试座位安排表输出到当前目录下的out.txt文件中。程序检查座位号的规则如下:
1、首先对考试座位安排表T1按座位号从小到大的顺序排序(原始考试安排可能有座位号相同情况,座位号相同时则按原始学号顺序排序),得到按座位号排序的安排表T2;

2、对表T2从头开始检查漏排座位号情况:假设当前表中安排的最大座位号为M,取M和N的较小值Q;从1号开始检查,若某个小于等于Q的座位序号没有安排学生,则将表T2的最后学生的座位设置为该座位号;若存在多个漏排座位,则从表T2最后依次向前设置;

3、然后再检查表T2中重排座位号情况:假设当前表中安排的最大座位号为m,将座位号重复的、学号较大的学生的座位号依次设置为m+1、m+2、m+3…;

  1. 将调整好的表T2按学号由小到大序排序后按输出格式要求输出至指定输出文件中。

【输入形式】
从标准输入中读入学生人数(不超过100的正整数)。

初始考试座位安排表存储在当前目录下的in.txt文件中,已按照学号由小到大的顺序分行存储每位学生座位信息,依次为学生学号(不超过8位的正整数)、姓名(由不超过20位的英文字母组成)和座位号(不超过100的正整数),各数据间以一个空格分隔。最后一个学生座位信息后有回车换行。
【输出形式】
按照学号由小到大的顺序将修正后的考试座位安排表输出到当前目录下的out.txt文件中,每行依次为学号、姓名和座位号,各数据之间以一个空格分隔。
【样例输入】

24

假设当前目录下的in.txt文件内容如下:
18373001 ShiTian 7
18373002 WangLi 15
18373003 LiGuoHong 23
18373005 QianSanQiang 26
18373006 ZhangQiang 8
18373007 SunXiXi 2
18373010 LiXing 12
18373011 TangYing 20
18373012 YangYang 4
18373013 ZhaoGang 27
18373014 ZhouLiang 18
18373015 WuShuo 9
18373016 ZhengSiSi 13
18373017 WangGong 27
18373018 TianTian 21
18373020 LeiLei 16
18373021 ZhangLou 10
18373022 WangLei 17
18373025 SunTian 24
18373026 JinXiang 18
18373028 PangHong 11
18373029 GaoLiang 2
18373030 GaoHang 6
18373031 YangYang 22
【样例输出】
当前目录下的out.txt文件内容应为:
18373001 ShiTian 7
18373002 WangLi 15
18373003 LiGuoHong 19
18373005 QianSanQiang 5
18373006 ZhangQiang 8
18373007 SunXiXi 2
18373010 LiXing 12
18373011 TangYing 20
18373012 YangYang 4
18373013 ZhaoGang 3
18373014 ZhouLiang 18
18373015 WuShuo 9
18373016 ZhengSiSi 13
18373017 WangGong 1
18373018 TianTian 21
18373020 LeiLei 16
18373021 ZhangLou 10
18373022 WangLei 17
18373025 SunTian 14
18373026 JinXiang 24
18373028 PangHong 11
18373029 GaoLiang 23
18373030 GaoHang 6
18373031 YangYang 22
【样例说明】
初始考试座位安排表中有24位学生的排位信息,正确情况下这些学生安排的座位号应为1~24。初始人工安排的座位信息有1、3、5、14和19号座位漏排,有2、18和27号座位重复安排学生。先对漏排的座位进行修正:已安排的最大座位号为27,学号为18373017和18373013的学生分别安排了27号座位,按照漏排座位修正规则,先将18373017学生安排在1号座位,再将18373013学生安排在3号座位;同理分别将18373005学生安排在5号座位,将18373025学生安排在14号座位,18373003号学生安排在19号座位。当前安排的最大座位号为22,还有2号和18号座位重复,将2号重复的学号较大的18373029号学生安排在23号座位,将18号重复的学号较大的18373026号学生安排在24号座位。这样修正后按照学号由小到大的顺序输出学生座位信息到out.txt中。

方法一

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#define MIN(a, b) ((a) < (b) ? (a) : (b))
struct member
{
   
    int id;
    int seat;
    char name[21];
} one[101], temp;
int i, j, n, min, after;

int cmp1(struct member *x, struct member *y)
{
   
    if (x->seat < y->seat)
        return -1;
    else if (x->seat == y->seat && x->id < y->id)
        return -1;
    else
        return 1;
}

int cmp2(struct member *x
### BUAA 面向对象编程课程的核心内容 面向对象编程(Object-Oriented Programming, OOP)作为现代软件开发的基础范式之一,在BUAA的相关课程中得到了深入探讨。该课程不仅注重理论知识的习,还通过实践项目强化生对OOP的理解和应用能力。 #### 1. **课程目标** - 本课程旨在引导生从传统的面向过程编程转向更加灵活高效的面向对象思维方式[^1]。 - 生能够掌握核心概念如封装、继承与多态,并将其应用于实际工程项目中[^2]。 - 提升代码质量的同降低维护成本,使开发者可以专注于解决复杂的业务需求而非纠缠于低效的实现细节[^3]。 #### 2. **主要教模块** ##### (1) **基础概念介绍** - 封装:隐藏内部状态并提供接口访问机制;保护数据安全性和一致性[^4]。 - 继承:子类可以从父类获取属性和方法,减少重复编码量[^5]。 - 多态:允许同一操作具有多种表现形式,增强系统的灵活性和扩展性。 ##### (2) **工具和技术支持** - JUnit框架被广泛用于自动化测试环节,尽管部分同对其强制性的覆盖率要求存在异议,但它确实有助于发现潜在缺陷并提高产品质量^。 ```java @Test public void testAddition() { Calculator calc = new Calculator(); assertEquals(4, calc.add(2, 2)); } ``` ##### (3) **实战演练——迭代作业体系** - 通过五个阶段逐步深化的知识点引入方式,帮助员构建完整的OOP技能树。 - 初始阶段重点在于熟悉基本语法规则及单类的设计思路;后期逐渐过渡至复杂场景下的综合运用能力培养。 #### 3. **常见反馈与改进建议** - 许多参与者反映JUnit习曲线陡峭且缺乏足够的官方文档支撑,因此建议增设专门针对此主题的教资源。 - 另外还有呼声较高的几点改进方向包括但不限于延长授课周期匹配现有任务负荷水平、提前阐明重要技术要点以便规避不必要的返工现象发生等等. --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值