「Mac玩转仓颉内测版14」PTA刷题篇5 - L1-005 考试座位号

本篇将继续讲解PTA平台上的题目 L1-005 考试座位号,通过考生准考证号与座位号的对应关系,掌握简单的数据查询与映射操作,进一步提升Cangjie编程语言的实际应用能力。


关键词
  • PTA刷题
  • 数据查询
  • 映射操作
  • 输入输出
  • Cangjie语言

一、L1-005 考试座位号

题目描述:输入若干学生的准考证号与考试座位号,之后再输入若干需要查询的准考证号,输出对应的考试座位号。

  • 输入格式:

    1. 首行给出一个正整数 N,表示考生人数。
    2. 接下来 N 行,每行包含一个准考证号(长度为15的字符串)和一个座位号(1到100之间的整数)。
    3. 最后输入一个正整数 M,表示需要查询的考生数。
    4. 接下来 M 行,每行包含一个准考证号,要求输出对应的座位号。
  • 输出格式:对每个查询的准考证号,输出对应的座位号。


解题思路
  1. 使用字典(映射)存储数据:将准考证号与座位号的对应关系存储在字典(映射)中,方便后续查询。
  2. 输入数据并建立映射 :根据考生人数 N,输入准考证号和座位号,建立准考证号到座位号的映射关系。
  3. 查询输出 :根据 M 个查询的准考证号,输出相应的座位号。

代码实现
cangjie 复制代码
package cjcDemo

import std.console.*
import std.convert.*
import std.collection.*

class Student {
    var examId: String          // 准考证号
    var testSeatId: Int64       // 试机座位号
    var examSeatId: Int64       // 考试座位号
    
    init(examId: String, testSeatId: Int64, examSeatId: Int64) {
        this.examId = examId
        this.testSeatId = testSeatId
        this.examSeatId = examSeatId
    }
}

// 封装录入学生数据的函数
func inputStudentData(studentCount: Int64): HashMap<Int64, Student> {
    let studentsMap: HashMap<Int64, Student> = HashMap<Int64, Student>()
    
    for (_ in 0..studentCount) {
        let studentData: Array<String> = Console.stdIn.readln().getOrThrow().split(" ")
        let parsedTestSeatId = Int64.parse(studentData[1])  // 解析出来的试机座位号
        let student = Student(studentData[0], parsedTestSeatId, Int64.parse(studentData[2]))  // 学生的准考证号和考试座位号
        studentsMap.put(parsedTestSeatId, student)
    }
    
    return studentsMap
}

// 封装查询学生数据的函数
func queryStudentData(studentsMap: HashMap<Int64, Student>): Unit {
    let queryIds: Array<String> = Console.stdIn.readln().getOrThrow().split(" ")
    
    for (queryId in queryIds) {
        let parsedQueryId = Int64.parse(queryId)  // 查询的试机座位号
        let student = studentsMap.get(parsedQueryId).getOrThrow()
        println("${student.examId} ${student.examSeatId}")
    }
}

// 主函数
main(): Int64 {
    // 读取学生数量并录入数据
    let studentCount: Int64 = Int64.parse(Console.stdIn.readln().getOrThrow())
    let studentsMap = inputStudentData(studentCount)
    
    // 读取需要查询的学生数量并进行查询
    Int64.parse(Console.stdIn.readln().getOrThrow())
    queryStudentData(studentsMap)

    return 0
}

代码详解
  1. 映射操作:使用字典(映射)将准考证号与座位号对应起来,方便查询。
  2. 数据输入 :根据输入的 N,逐行录入准考证号和座位号,并存储在映射中。
  3. 查询并输出 :根据 M 个查询的准考证号,直接从映射中获取并输出对应的座位号。

示例执行

输入:

复制代码
4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4

输出:

复制代码
3310120150912002 2
3310120150912119 1

通过这道题目,进一步掌握了映射操作和查询机制,能够高效处理数据并进行输出。


小结

本篇通过实现 L1-005 考试座位号 题目,练习了数据查询与映射操作,能够高效应对类似的映射查询问题,进一步强化了编程实战能力。


下篇预告

下一篇将继续进行PTA刷题,讲解 L1-006 连续因子 的解题思路与实现,敬请期待 「Mac玩转仓颉内测版15」PTA刷题篇6 - L1-006 连续因子


上一篇: 「Mac玩转仓颉内测版13」PTA刷题篇4 - L1-004 计算摄氏温度
下一篇: 「Mac玩转仓颉内测版15」PTA刷题篇6 - L1-006 连续因子

作者:SoraLuna

链接:https://www.nutpi.net/thread?topicId=159

來源:坚果派

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


相关推荐
Xd聊架构5 小时前
苹果电脑mac抖音直播伴侣直播
macos·抖音直播·obs·pd虚拟机·mac直播
程序猿_极客5 小时前
【2025 年最新版】Java JDK 安装与环境配置教程(附图文超详细,Windows+macOS 通用)
java·开发语言·windows·macos·jdk
年糕~milo5 小时前
mac 安装虚拟机保姆级教程(vmware fusion)
macos
是店小二呀5 小时前
Mac 用户久等了!节点小宝 4.0 macOS版,正式登陆!
macos
猫头虎5 小时前
macOS 双开/多开微信WeChat完整教程(支持 4.X 及以上版本)
java·vscode·macos·微信·编辑器·mac·脚本
ghostwritten5 小时前
在 macOS 上安装 Claude Code 的完整指南
macos
一个不知名程序员www8 小时前
算法学习入门 --- 哈希表和unordered_map、unordered_set(C++)
c++·算法
Sarvartha8 小时前
C++ STL 栈的便捷使用
c++·算法
夏鹏今天学习了吗9 小时前
【LeetCode热题100(92/100)】多数元素
算法·leetcode·职场和发展
飞Link9 小时前
深度解析 MSER 最大稳定极值区域算法
人工智能·opencv·算法·计算机视觉