用C语言写一个编程 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。 输入格式: 输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。 考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。 输出格式: 对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。
时间: 2024-02-28 19:58:01 浏览: 251
以下是用 C 语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义一个结构体存储考生信息
typedef struct {
char id[17]; // 准考证号
int testSeat; // 考试座位号
} Student;
// 按试机座位号从小到大排序
int cmp(const void *a, const void *b) {
return ((Student *)a)->testSeat - ((Student *)b)->testSeat;
}
int main() {
int n, m;
scanf("%d", &n);
Student *students = (Student *)malloc(n * sizeof(Student)); // 动态分配内存
for (int i = 0; i < n; i++) {
scanf("%s %d %d", students[i].id, &students[i].testSeat, &students[i].testSeat);
}
qsort(students, n, sizeof(Student), cmp); // 排序
scanf("%d", &m);
for (int i = 0; i < m; i++) {
int testSeat;
scanf("%d", &testSeat);
for (int j = 0; j < n; j++) {
if (students[j].testSeat == testSeat) { // 找到对应考试座位号
printf("%s %d\n", students[j].id, students[j].testSeat);
break;
}
}
}
free(students); // 释放内存
return 0;
}
```
代码思路:
1. 定义一个 `Student` 结构体,存储考生信息。
2. 动态分配内存,读入每个考生的信息。
3. 按考试座位号从小到大排序。
4. 读入待查询的试机座位号码,遍历考生信息数组,找到对应考试座位号码。
5. 输出准考证号和考试座位号码。
6. 释放动态分配的内存。
注意事项:
1. 准考证号为字符串类型,需要使用 `%s` 格式化符读入。
2. 动态分配内存需要使用 `malloc` 函数,在程序结束时需要使用 `free` 函数释放内存。
3. 按考试座位号从小到大排序可以使用 `qsort` 函数,需要自定义一个比较函数。
4. 在遍历考生信息数组时,找到对应考试座位号码后需要使用 `break` 退出循环,避免多余的遍历。
阅读全文