OJ刷题之旅
题目描述依次给你n个学生的姓名、学号然后Q次询问对于每一次询问你会得到一个学号请你输出该学号对应的姓名。输入第一行输入一个整数n1n100然后n行每行输入一个长度不超过15的字符串s表示姓名和一个10位整数表示学号。学号保证没有前导零且每个学号都不相同 再输入一个整数Q0Q10紧接着Q次询问每次询问输入一个10位整数表示询问的学号。保证询问的学号存在输出对于每一次询问输出与学号对应的姓名。样例输入 Copy 5 Anoyer 1000000000 LZH 1314521520 ZZ 9876543210 zhangfei 1234567890 ayi 5432198760 2 1314521520 1000000000输出 Copy LZH Anoyer来源/分类结构体题解以下是一个基本的 C 语言程序用于实现所描述的功能#include stdio.h #include string.h#define MAX_N 100#define ID_LENGTH 11/* 定义学生结构体 */struct student {char name[16];char id[ID_LENGTH];};int main() {int n, q, i, j;struct student students[MAX_N];/* 读入学生信息 */ scanf(%d, amp;n); for (i 0; i lt; n; i) { scanf(%s %s, students[i].name, students[i].id); } /* 处理查询请求 */ scanf(%d, amp;q); for (i 0; i lt; q; i) { char query[ID_LENGTH]; scanf(%s, query); /* 在学生列表中查找该学号对应的姓名 */ for (j 0; j lt; n; j) { if (strcmp(students[j].id, query) 0) { printf(%s\n, students[j].name); break; } } } return 0;}程序首先定义了一个结构体student表示一个学生的信息。该结构体包含两个成员变量name表示学生姓名类型为字符数组长度为 16id表示学生学号类型为字符数组长度为 11。然后程序读入了一个整数n表示学生数量。接下来的n行每行输入一个字符串s即学生姓名和学号其中姓名和学号用一个空格分隔。程序将读入的学生信息存储在一个长度为n的结构体数组students中。接着程序读入一个整数q表示查询请求的数量。程序使用一个循环处理每个查询请求首先读入一个字符串query表示要查询的学号然后在学生列表中查找该学号对应的姓名并输出结果。如果在列表中没有找到对应的学号则程序不会输出任何内容。注意在本程序中我们使用了 C 语言标准库中的strcmp函数来比较两个字符串是否相等。该函数返回值为 0 表示两个字符串相等。问题描述本题C链表结构体定义如下 struct lis{ int v; struct lis* next; }; typedef struct lis* Lis; 要求实现函数 int sum(Lis head)//返回以head为头指针(本身不存值)的链表各个结点值的和输入 一个数n代表链表的长度 接下来n个数ai代表每个节点的内容n与ai范围[1,100]输出一行和样例样例输入 Copy 3 1 2 3 样例输出 Copy 6下面是一个实现题目要求的 C 语言函数sum的代码int sum(Lis head) { int sum 0; Lis curr head-next; while (curr ! NULL) { sum curr-v; curr curr-next; } return sum; }该函数计算以参数head所指向的链表头结点为头节点的链表中各个结点值的和并将结果作为返回值返回。其中参数head是一个指向链表头节点的指针链表的每个节点由结构体lis表示其中v成员变量存储该节点的值next成员变量存储指向下一个节点的指针。在代码中我们首先将变量sum初始化为 0然后从链表的第二个节点开始遍历整个链表。遍历过程中对于每个节点我们将其值加到sum中然后继续遍历下一个节点。当遍历到链表尾部时我们退出循环并返回sum。需要注意的是在链表中头结点本身不存储任何实际数据仅用于标记链表的起始位置。因此我们在遍历链表时应从头结点的next指针所指向的节点开始遍历。问题描述本题C链表结构体定义如下 struct lis{ int v; struct lis* next; }; typedef struct lis* Lis; 要求实现函数 int sum(Lis head)//返回以head为头指针(本身不存值)的链表各个结点值的和输入 一个数n代表链表的长度 接下来n个数ai代表每个节点的内容n与ai范围[1,100]输出一行和样例样例输入 Copy 3 1 2 3 样例输出 Copy 6下面是一个实现题目要求的 C 语言函数sum的代码int sum(Lis head) { int sum 0; Lis curr head-next; while (curr ! NULL) { sum curr-v; curr curr-next; } return sum; }该函数计算以参数head所指向的链表头结点为头节点的链表中各个结点值的和并将结果作为返回值返回。其中参数head是一个指向链表头节点的指针链表的每个节点由结构体lis表示其中v成员变量存储该节点的值next成员变量存储指向下一个节点的指针。在代码中我们首先将变量sum初始化为 0然后从链表的第二个节点开始遍历整个链表。遍历过程中对于每个节点我们将其值加到sum中然后继续遍历下一个节点。当遍历到链表尾部时我们退出循环并返回sum。需要注意的是在链表中头结点本身不存储任何实际数据仅用于标记链表的起始位置。因此我们在遍历链表时应从头结点的next指针所指向的节点开始遍历。