Files
iOS_2026_National_Day/tasks/01-basics.md
T

98 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第一题 出门检查器
类型:基础题。语言: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 语法提示,向干部询问环境问题或某个基础概念;不能让他人代写本题。
请亲自运行,比较预期与实际结果,必要时修改后重试。无需额外提交调试报告,也不要求必须遇到或制造某个错误。二面可能请你解释某段代码,或预测改变一份清单后会输出什么。
## 评价重点
规则是否正确;空数组等情形是否处理;是否能随输入变化得到结果;源码是否清楚;是否有本人真实运行的结果。截图本身不能证明独立完成,评价会结合源码及二面交流。