「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

來源:坚果派

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


相关推荐
Wils0nEdwards19 分钟前
Leetcode 存在重复元素II
算法·leetcode·职场和发展
木向1 小时前
leetcode226:反转二叉树
算法
小媛早点睡1 小时前
贪心算法day 06
算法·贪心算法
笨小古1 小时前
路径规划——RRT*算法
算法·路径规划·导航
zzxxlty2 小时前
Macos mysql实现命令自动补全的方法
数据库·mysql·macos
H_kiwi2 小时前
APT 参与者将恶意软件嵌入 macOS Flutter 应用程序中
java·python·安全·flutter·macos·安全威胁分析·安全性测试
好玩的Matlab(NCEPU)2 小时前
卡尔曼滤波器
人工智能·算法
zhangpz_2 小时前
c ++零基础可视化——数组
c++·算法
颹蕭蕭3 小时前
均值方差增量计算
算法·均值算法·概率论