1041 考试座位号 (15 分)
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号
。其中准考证号
由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。
考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。
4 3310120150912233 2 4 3310120150912119 4 1 3310120150912126 1 3 3310120150912002 3 2 2 3 4
3310120150912002 2 3310120150912119 1
思路:考虑输入的信息,准考证号16位、试机位、座位号、查找试机号。
初步想法是用三个int数组来分别存放准考证号、试机位、座位号,数组长度设置为1000,且准考证号要long long int类型。以及一个数组来存放查找试机号。
输入结束后,作者想法是遍历查找试机号的数组,与试机位数组对比,如果相同则输入。时间复杂度O(n^2)
最后一个输出做特殊处理。
你有好的想法,欢迎贡献。谢谢
#include<iostream> using namespace std; int main() { int N, M; int arr_get[1000] = {0}; // 待查找座位号 long long int arr[1000] = { 0 }; // 存放边界值N=10000;以及准考证座位号18位数 int arr_test_seat[1000] = { 0 }; // 存放试机位 int arr_seat[1000] = { 0 }; // 存放座位 cin >> N; /*输入座位信息 准考证号*/ for (int i = 0; i < N; i++) { cin >> arr[i]; cin >> arr_test_seat[i]; cin >> arr_seat[i]; } /*输入待查找信息*/ cin >> M; for (int i = 0; i < M; i++) { cin >> arr_get[i]; } /*查找开始,遍历查找*/ for (int i = 0; i < M - 1; i++) { int tem; tem = arr_get[i]; for (int j = 0; j < N; j++) { if (tem == arr_test_seat[j]) { cout << arr[j] << " " << arr_seat[j] << "\n"; } } } /*最后一个输出做特殊处理*/ int i = M - 1; int tem; tem = arr_get[i]; for (int j = 0; j < N; j++) { if (tem == arr_test_seat[j]) { cout << arr[j] << " " << arr_seat[j] << endl; } } }
图 1 测 评 结 果 图1~测评结果 图1 测评结果