申诉

前些日子 ISCteam要招 intern,我帮着出了道题 被扔在选作题里面(居然还被标为英文阅读题。。。庐山瀑布汗)
面试的同志们打完了 由出题人负责打分 如果不满意可以进行申诉

不过 我倒还真没想到我的题也有考生会来申诉
前两道都是任务相关,最后一道是一个问如果交换变量 如何用时间换空间 写段代码出来

基本上来讲 对就是对 错就是错 明明没什么好说的呀。

此君申辩 略过不表 (反正被我说的服了,一点脾气也没有)

在这里小谈下时间换空间的方法 抛个转头 等着有玉来砸

时间换空间
时间资源是什么 估计大家都知道,顾名思义么。
空间资源是什么,就是我们的硬件资源,CPU 内存什么的

一般的交换方法 大家都会
设个中间变量做中继来交换
tmp = a
a = b
b = tmp

但既然是时间换空间 自然要尽量减少空间消耗 也就是 不用中间变量
这个时候 简单的办法是
两数叠加再分配
a = a+b
b = a-b
a = a-b
但许多情况是要被考虑的 比如 超过上限怎么办
此时就可以判断两数是否同号,若是不同号则用符号比较就好, 同号的话 可以用减法代替加法 来处理掉

当年还在某个群厮混的时候还看到了某一牛人的写法
好像是
a^=b^=a^=b
大概是这样的,是用异或的办法来处理

当然 在某些可以用指针的语言里就更方便了 交换个地址就成了
由于对指针已经忘光了 在这里 抄袭下别人的文章 来说明这个问题
if(a{ 
a=(int*)(b-a); 
b=(int*)(b-(int(a)&0x0000ffff)); 
a=(int*)(b+(int(a)&0x0000ffff)); 

else 

b=(int*)(a-b); 
a=(int*)(a-(int(b)&0x0000ffff)); 
b=(int*)(a+(int(b)&0x0000ffff)); 

之所以分两种情况是为了避免 地址计算出现负数

大概能想到的就这么多。
不过 在考卷中有个答案还是令我耳目一新并埋怨自己怎么把老本行都忘记了
那就是单片机
将两个变量分别赋予 AH AL 然后让AX自滚动4位 就好了


砖头已出 待玉登场~

### 申诉功能设计方案 #### 功能概述 申诉功能允许学生针对教师对其行为评分的结果发起异议申请。此功能需结合模板模式[^1]来设计核心逻辑框架,同时利用面向对象方法完成类结构设计[^2],并通过类图表示各组件间的关系[^3]。 以下是实现申诉功能的具体设计方案: --- #### 数据库设计 为了支持申诉功能,需要扩展原有的数据库表结构。新增一张 `Appeal` 表用于记录学生的申诉请求及其状态。 | 字段名 | 类型 | 描述 | |----------------|---------------|--------------------------| | appeal_id | INT | 主键,自增 | | student_id | INT | 学生ID | | behavior_id | INT | 被申诉的行为记录ID | | teacher_id | INT | 打分教师ID | | content | TEXT | 申诉理由 | | status | ENUM('pending', 'approved', 'rejected') | 申诉状态 | | created_at | DATETIME | 创建时间 | --- #### 类图设计 根据类图的作用,可以构建如下类结构: - **Student**: 提供创建申诉的功能。 - **Teacher**: 处理申诉并更新状态。 - **BehaviorRecord**: 记录学生活动及得分情况。 - **AppealManager**: 管理整个申诉流程的核心类。 ```plaintext +-------------------+ | Student | +-------------------+ | - id: int | | - name: string | +-------------------+ | + create_appeal()| +-------------------+ +-------------------+ | Teacher | +-------------------+ | - id: int | | - name: string | +-------------------+ | + handle_appeal()| +-------------------+ +--------------------+ | BehaviorRecord | +--------------------+ | - record_id: int | | - score: float | | - description: str| +--------------------+ +--------------------+ | AppealManager | +--------------------+ | + process_appeal()| +--------------------+ ``` --- #### 核心代码示例 ##### 1. 基于模板模式的抽象基类 通过模板模式定义申诉处理的整体框架。 ```python from abc import ABC, abstractmethod class AbstractAppealHandler(ABC): @abstractmethod def validate(self): """验证申诉是否合法""" pass @abstractmethod def notify_teacher(self): """通知教师处理申诉""" pass @abstractmethod def update_status(self): """更新申诉状态""" pass def process_appeal(self): self.validate() self.notify_teacher() self.update_status() ``` ##### 2. 具体实现类 继承上述抽象基类,提供具体的实现细节。 ```python import datetime class ConcreteAppealHandler(AbstractAppealHandler): def __init__(self, appeal_data): self.appeal_data = appeal_data def validate(self): # 验证逻辑:检查是否存在对应行为记录 if not self._check_behavior_record(): raise ValueError("Invalid behavior ID.") def _check_behavior_record(self): # 模拟查询数据库 return True # 如果存在则返回True def notify_teacher(self): print(f"Notifying teacher {self.appeal_data['teacher_id']} to review the appeal...") def update_status(self): current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f"Updating appeal status to pending at {current_time}.") ``` ##### 3. 测试代码 模拟一次完整的申诉过程。 ```python if __name__ == "__main__": appeal_info = { "student_id": 1, "behavior_id": 101, "teacher_id": 5, "content": "I believe this score is unfair." } handler = ConcreteAppealHandler(appeal_info) try: handler.process_appeal() except ValueError as e: print(e) ``` --- #### 技术要点说明 1. 使用模板模式将通用逻辑提取到父类中,而具体实现交由子类负责。 2. 结合数据库设计和类图,确保系统具有良好的扩展性和可维护性。 3. 在实际开发过程中,还需考虑异常处理机制以及多线程环境下的并发控制问题。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值