每个 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
实现代码:
建立 string 类型的二维数组 stu[1005][2],假设试机座位号为 t,将输入得到的学生准考证号 s1 保存在 stu[t][0]中,考试座位号 s2 保存在 stu[t][1]中,对于查询的 m 个学生, 已知试机座位号 t,则直接输出 stu[t][0]和 stu[t][1]即可。
#include<iostream>
using namespace std;
int main()
{
string stu[1005][2],s1,s2;
int n,m,t;
cin>>n;
for(int i=0;i<n;i++){
cin>>s1>>t>>s2;
stu[t][0]=s1;
stu[t][1]=s2;
}
cin>>m;
for(int i=0;i<m;i++){
cin>>t;
cout<<stu[t][0]<<" "<<stu[t][1]<<endl;
}
return 0;
}
知识点:
二维数组:
一维数组对于存储和处理一组数据很有用,但是有时候,很有必要使用多维数组。
例如,在统计学生成绩的程序中,教师可以将一个学生的所有科目考试分数记录在一个 double 类型的数组中。如果老师有40 名学生,那就意味着需要 40 个 double 类型数组来记录整个班级的分数。当然,在这里定义 40 个单独的一维数组显然是不合适的,而只要定义一个二维数组就可以了。
到目前为止,教程中所介绍的数组都只是一维数组,因为它们只能保存一组数据。二维数组,也称为 2D 数组,可以容纳多组数据。最好将二维数组看作具有行和列元素的表,一个二维数组可以被认为是一个带有 x 行和 y 列的表格。如下图 所示:
这张图是以二维数组显示了 3 行 4 列的考试成绩。
注意:数组的索引(下标)编号是从0开始的,所以3 行的编号为 0〜2, 4 列的编号则为 0〜3。数组中一共有 3*4=12 个元素。
二、二维数组的内存存储
一般的我们说的C/C++中的二维数组是定义在栈中的二维数组。比如定义了一个array[3][4],那就指的是定义了一个三行四列的矩阵形状的二维数组,如下图所示。这样的矩阵在内存中是以箭头右边的方式存放的,也就是说实际上我们定义的二维数组在内存中仍然像是一维数组那样连续存储的。可以想象为把一个矩阵一层层伸展铺平。
三、二维数组的定义
二维数组的定义可以是静态二维数组,可以是动态数组。
要定义一个二维数组,需要两个大小声明符。第一个是行数,第二个是列数。
定义方法有:
下面是一个 3 行 4 列的二维数组定义的例子:
方法一: 直接确定二维数组的行和列数
(1)确定二维数组的行和列数,但是不确定数组中的具体元素:
// 定义一个double类型的2行3列的二维数组,并没有确定数组中的具体元素
double score[3][4];
(2)不完全确定数组中的具体元素
// 定义一个int类型的2行3列的二维数组,并没有确定数组中的具体元素
int a[3][4] = {1,2,3,4,5,6}
(3)确定二维数组的行和列数,并且确定数组中的具体元素:
a.直接将二维数组铺平,写成一维数组的形式
//a是一个2行3列的二维数组,并且确定好了里边的元素
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
b.使用标准的二维数组的初始化方式
int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
方法二: 不用指明二维数组的行数,但要指明列数
注意:二维数组必须写明列数,行数可以不写明!
/* 经典的写法
*/
int array[][4];
/* 一种更帅的写法,本质上是定义了一个数组指针
*/
int (*array)[4];
方法三: 动态分配的方式,这种写法比较灵活,在定义的时候不需要指明二维矩阵的行数和列数
/* 使用动态分配内存的形式,用malloc
*/
int **array // array[M][N]
array = (int **)malloc(M * sizeof(int *));
for(int i = 0; i < M; i++) {
array[i] = (int *)malloc(N * sizeof(int));
}
// 释放
for(int i = 0; i < M; i++)
free(array[i]);
free(array);
/* 使用动态分配内存的形式,用new
*/
int **array // array[M][N]
array = new int*[M];
for(int i = 0; i < M; i++) {
array[i] = new int[N];
}
// 释放
for(int i = 0; i < M; i++)
delete [] array[i];
delete [] array;
标签:定义,试机,int,二维,数组,array,座位号,考试
From: https://blog.51cto.com/u_16286645/8694998