「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

來源:坚果派

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


相关推荐
旺仔小拳头..18 小时前
数据结构(三)----树/二叉树/完全二叉树/线索二叉树/哈夫曼树/树、二叉树、森林之间的转换/前 中 后序遍历
算法
Sheep Shaun18 小时前
STL:string和vector
开发语言·数据结构·c++·算法·leetcode
winfield82118 小时前
滑动时间窗口,找一段区间中的最大值
数据结构·算法
小徐Chao努力18 小时前
Go语言核心知识点底层原理教程【Slice的底层实现】
开发语言·算法·golang
赫凯19 小时前
【强化学习】第三章 马尔可夫决策过程
python·算法
资生算法程序员_畅想家_剑魔19 小时前
算法-动态规划-13
算法·动态规划
k***921619 小时前
list 迭代器:C++ 容器封装的 “行为统一” 艺术
java·开发语言·数据结构·c++·算法·list
natide19 小时前
词汇/表达差异-6-n-gram分布距离
人工智能·python·算法
xu_yule19 小时前
算法基础-多源最短路
c++·算法·多源最短路
火羽白麟20 小时前
大坝安全的“大脑”——模型与算法
算法·模型·大坝安全