98 lines
5.5 KiB
Markdown
98 lines
5.5 KiB
Markdown
# 第一题 出门检查器
|
||
|
||
类型:基础题。语言:Swift。提交:源码和真实运行截图。全程不得使用 AI。
|
||
|
||
## 任务背景
|
||
|
||
出门前,你有一份“需要带的物品”清单,也知道哪些物品已经放进包里。请写一个程序,对照两份清单,告诉你还缺什么。
|
||
|
||
这道题只需要 Swift 基础语法,不需要制作图形界面。
|
||
|
||
## 输入和规则
|
||
|
||
用两个字符串数组表示清单:
|
||
|
||
```swift
|
||
let requiredItems = ["校园卡", "钥匙", "水杯", "耳机"]
|
||
var packedItems = ["手机", "校园卡", "钥匙"]
|
||
```
|
||
|
||
- `requiredItems` 是本次需要带的物品。
|
||
- `packedItems` 是已经放进包里的物品,可能包含本次清单之外的东西。
|
||
- 本题保证每个数组内部没有重复名称,也没有空名称。名称按字符串完全相同判断,无需处理错别字、空格清理或模糊匹配。
|
||
- 缺少的物品应按 `requiredItems` 中的先后顺序返回。
|
||
- 本题只判断物品是否存在,不处理数量。
|
||
|
||
## 你需要完成什么
|
||
|
||
**1. 编写检查函数。**
|
||
|
||
自己编写一个名为 `findMissingItems` 的函数,接收两个 `[String]`,返回缺少物品的 `[String]`。为了方便统一检查,请使用下面的函数名称和参数标签:
|
||
|
||
```swift
|
||
func findMissingItems(required: [String], packed: [String]) -> [String]
|
||
```
|
||
|
||
上面只是接口说明,不是完整代码。花括号和函数内部逻辑由你编写。
|
||
|
||
**2. 调用函数并输出结果。**
|
||
|
||
输出需要带的物品、已装入的物品,以及缺少物品的名称和数量。需要清单非空且没有缺少物品时,输出“已经准备好了,可以出发”;需要清单为空时,输出“本次没有必带物品,无需检查”。
|
||
|
||
初始数据应得到:缺少水杯、耳机,共 2 项。手机不在需要清单里,不影响结果。输出排版可以自行安排,只要信息清楚,不按装饰性标点或空格扣分。
|
||
|
||
**3. 修改数据,再次运行。**
|
||
|
||
在同一个程序中,向已装入清单依次添加“水杯”和“耳机”,每次添加后都重新调用检查函数并打印结果。预期变化:缺两项 → 只缺耳机 → 准备齐全。
|
||
|
||
**4. 检查其他情形。**
|
||
|
||
使用下面的公开案例验证函数,并在输出中标明案例名称。程序应适用于符合规则的其他清单,不能把示例答案直接写死。
|
||
|
||
| 案例 | 需要带的物品 | 已装入的物品 | 函数应返回 |
|
||
| --- | --- | --- | --- |
|
||
| A 初次检查 | 校园卡、钥匙、水杯、耳机 | 手机、校园卡、钥匙 | 水杯、耳机 |
|
||
| B 添加水杯后 | 校园卡、钥匙、水杯、耳机 | 手机、校园卡、钥匙、水杯 | 耳机 |
|
||
| C 再添加耳机后 | 校园卡、钥匙、水杯、耳机 | 手机、校园卡、钥匙、水杯、耳机 | 空数组 |
|
||
| D 包里什么都没有 | 钥匙、水杯 | 空数组 | 钥匙、水杯 |
|
||
| E 本次没有必带物品 | 空数组 | 手机 | 空数组 |
|
||
| F 两份清单都为空 | 空数组 | 空数组 | 空数组 |
|
||
|
||
C 输出准备齐全的提示;E、F 输出无需检查的提示。修改数组和运行这些案例属于同一道基础题,不另算拔高任务。
|
||
|
||
## 提交材料
|
||
|
||
1. `main.swift`:包含自己编写的函数、调用与上述运行案例;命名清楚,适当添加注释。
|
||
2. 运行截图:能够辨认程序实际输出,覆盖 A–F。可以分多张截图,不要求把所有内容挤在一张图里。
|
||
|
||
源码和截图应来自同一个最终版本。允许裁去无关窗口,不得修改运行结果文字、拼造结果或用 AI 生成截图。未全部完成时可提交当前源码与实际结果,标注未完成处。
|
||
|
||
## 学习范围与资源
|
||
|
||
学习到能使用下面这些内容即可:
|
||
|
||
- `let`、`var`,字符串与布尔值;
|
||
- 数组的创建、遍历、添加、数量和空数组;
|
||
- `if/else`、`for-in`;
|
||
- 函数参数、返回值和调用;
|
||
- `print` 输出及字符串插值。
|
||
|
||
可从[菜鸟教程 Swift 目录](https://www.runoob.com/swift/swift-tutorial.html)按以上主题阅读。无需通读可选类型、结构体、类、闭包、泛型或 SwiftUI。遇到教程样例与所用版本不一致,可参考下列 Swift 官方说明或询问授课干部。
|
||
|
||
- [基础语法](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/thebasics/)
|
||
- [数组与集合](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/collectiontypes/)
|
||
- [条件与循环](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/controlflow/)
|
||
- [函数](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/functions/)
|
||
|
||
可以用循环判断,也可以使用自己理解的标准库方法。不以代码行数、运行速度排名或使用高级语法的数量评判本题。
|
||
|
||
## 独立完成规则
|
||
|
||
本题不得使用 AI,包括解题思路、代码生成或 AI 补全、代码解释、排错。可以阅读普通教程和官方文档,使用编辑器的非 AI 语法提示,向干部询问环境问题或某个基础概念;不能让他人代写本题。
|
||
|
||
请亲自运行,比较预期与实际结果,必要时修改后重试。无需额外提交调试报告,也不要求必须遇到或制造某个错误。二面可能请你解释某段代码,或预测改变一份清单后会输出什么。
|
||
|
||
## 评价重点
|
||
|
||
规则是否正确;空数组等情形是否处理;是否能随输入变化得到结果;源码是否清楚;是否有本人真实运行的结果。截图本身不能证明独立完成,评价会结合源码及二面交流。
|