「PAT乙级真题解析」Basic Level 1100 校庆 (问题分析+完整步骤+伪代码描述+提交通过代码)
admin
2024-05-01 01:56:35
0

乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。

PAT (Basic Level) Practice 1100 校庆

问题分析

  • 题设给定了一组校友ID, 然后给定了一组来宾ID, 要求输出是校友的来宾中, 最年长的一位。
  • 如果来宾中没有校友, 则输出来宾中最年长的一位。
  • 由于涉及到查询, 所以本题的重点在于数据的存储与查询。ID是由数字和大写字母组成, 所以需要存储成字符串。
  • 查询时的比较可以使用字符串比较函数。
  • 同时为了性能考虑, 可能先对要查询的校友ID进行排序, 然后查询时使用二分查找。
  • 进一步性能考虑, 存储最值时可以存储最年长校友在数组中的索引而不是直接存储字符串, 避免多次字符串拷贝。

完整描述步骤

  1. 获取输入: 校友人数, 各个校友的ID
  2. 对各个校友的ID进行排序
  3. 初始化记录器:
    • 最年长的校友索引 = -1
    • 最年长的来宾索引 = -1
    • 最年长的校友生日 = “99999999”
    • 最年长的来宾生日 = “99999999”
    • 出席的来宾是校友的数量 = 0
  4. 获取输入: 来宾人数, 各个来宾的ID
  5. 对于每一个来宾的ID:
    • 如果来宾的ID在校友ID中:
      • 出席的来宾是校友的数量++
      • 如果来宾的生日 大于 最年长的校友生日:
        • 最年长的校友生日 = 来宾生日
        • 最年长的校友索引 = 当前来宾索引
    • 否则:
      • 如果来宾的生日 大于 最年长的来宾生日:
        • 最年长的来宾生日 = 来宾生日
        • 最年长的来宾索引 = 当前来宾索引
  6. 输出 出席的来宾是校友的数量
  7. 如果 出席的来宾是校友的数量 > 0:
    • 输出 来宾IDs[最年长的校友索引]
  8. 否则:
    • 输出 来宾IDs[最年长的来宾索引]

伪代码描述

  1. get input: schoolmate_amount, schoolmate_IDs
  2. sort schoolmate_IDs
  3. get input: guest_amount, guest_IDs
  4. init recorder:
    • eldest_schoolmate_birthday = “99999999”;
    • eldest_schoolmate_index = -1;
    • eldest_guest_birthday = “99999999”;
    • eldest_guest_index = -1;
    • schoolmate_guest_amount = 0;
  5. for index, guest_ID in guest_IDs:
    • guest_birthday = guest_ID[6:14];
    • if guest_ID in schoolmate_IDs:
      • schoolmate_guest_amount++;
      • if birthday < eldest_schoolmate_birthday:
        • eldest_schoolmate_birthday = birthday;
        • eldest_schoolmate_index = index;
    • else:
      • if birthday < eldest_guest_birthday:
        • eldest_guest_birthday = birthday;
        • eldest_guest_index = index;
  6. print(schoolmate_guest_amount);
  7. if schoolmate_guest_amount > 0:
    • print(guest_IDs[eldest_schoolmate_index]);
  8. else:
    • print(guest_IDs[eldest_guest_index]);

注意事项

  1. 测试点1, 测试点4错误
    • 由于不管是最年长的校友还是来宾, 记录的索引都是来宾数组中的索引
    • 所以输出的时候也要从来宾数组中获取

完整提交代码

/*
# 问题分析
题设给定了一组校友ID, 然后给定了一组来宾ID, 要求输出是校友的来宾中, 最年长的一位。
如果来宾中没有校友, 则输出来宾中最年长的一位。
由于涉及到查询, 所以本题的重点在于数据的存储与查询。ID是由数字和大写字母组成, 所以需要存储成字符串。
查询时的比较可以使用字符串比较函数。
同时为了性能考虑, 可能先对要查询的校友ID进行排序, 然后查询时使用二分查找。
进一步性能考虑, 存储最值时可以存储最年长校友在数组中的索引而不是直接存储字符串, 避免多次字符串拷贝。# 完整描述步骤
1. 获取输入: 校友人数, 各个校友的ID
2. 对各个校友的ID进行排序
3. 初始化记录器:- 最年长的校友索引 = -1- 最年长的来宾索引 = -1- 最年长的校友生日 = "99999999"- 最年长的来宾生日 = "99999999"- 出席的来宾是校友的数量 = 0
4. 获取输入: 来宾人数, 各个来宾的ID
5. 对于每一个来宾的ID:- 如果来宾的ID在校友ID中:- 出席的来宾是校友的数量++- 如果来宾的生日 大于 最年长的校友生日:- 最年长的校友生日 = 来宾生日- 最年长的校友索引 = 当前来宾索引- 否则:- 如果来宾的生日 大于 最年长的来宾生日:- 最年长的来宾生日 = 来宾生日- 最年长的来宾索引 = 当前来宾索引
6. 输出 出席的来宾是校友的数量
7. 如果 出席的来宾是校友的数量 > 0:- 输出 来宾IDs[最年长的校友索引]
8. 否则:- 输出 来宾IDs[最年长的来宾索引]# 伪代码描述
1. get input: schoolmate_amount, schoolmate_IDs
2. sort schoolmate_IDs
3. get input: guest_amount, guest_IDs
4. init recorder:- eldest_schoolmate_birthday = "99999999";- eldest_schoolmate_index = -1;- eldest_guest_birthday = "99999999";- eldest_guest_index = -1;- schoolmate_guest_amount = 0;
5. for index, guest_ID in guest_IDs:- guest_birthday = guest_ID[6:14];- if guest_ID in schoolmate_IDs:- schoolmate_guest_amount++;- if birthday < eldest_schoolmate_birthday:- eldest_schoolmate_birthday = birthday;- eldest_schoolmate_index = index;- else:- if birthday < eldest_guest_birthday:- eldest_guest_birthday = birthday;- eldest_guest_index = index;
6. print(schoolmate_guest_amount);
7. if schoolmate_guest_amount > 0:- print(guest_IDs[eldest_schoolmate_index]);
8. else:- print(guest_IDs[eldest_guest_index]);# 注意事项
1. 测试点1, 测试点4错误- 由于不管是最年长的校友还是来宾, 记录的索引都是来宾数组中的索引- 所以输出的时候也要从来宾数组中获取
*/# include
# include
# includechar schoolmate_IDs[100000][19];
char guest_IDs[100000][19];int cmp_ID(const void* a, const void* b){return strcmp((char*) a, (char*) b);
}void extract_birthday_from_ID(char *birthday, char *ID){for (int i = 0; i < 8; i++){birthday[i] = ID[i+6];}birthday[8] = '\0';
}int main(){int schoolmate_amount;scanf("%d", &schoolmate_amount);for (int i = 0; i < schoolmate_amount; i++){scanf("%s", schoolmate_IDs[i]);}qsort(schoolmate_IDs, schoolmate_amount, sizeof(char)*19, cmp_ID);int guest_amount;scanf("%d", &guest_amount);for (int i = 0; i < guest_amount; i++){scanf("%s", guest_IDs[i]);}char eldest_schoolmate_birthday[9] = "99999999";int eldest_schoolmate_index = -1;char eldest_guest_birthday[9] = "99999999";int eldest_guest_index = -1;char schoolmate_guest_amount = 0;char birthday[9];for (int i = 0; i < guest_amount; i++){extract_birthday_from_ID(birthday, guest_IDs[i]);char **found = bsearch(guest_IDs[i], schoolmate_IDs, schoolmate_amount, sizeof(char)*19, cmp_ID);if (found != NULL){schoolmate_guest_amount++;if (strcmp(birthday, eldest_schoolmate_birthday) < 0){strcpy(eldest_schoolmate_birthday, birthday);eldest_schoolmate_index = i;}}if (strcmp(birthday, eldest_guest_birthday) < 0) {strcpy(eldest_guest_birthday, birthday);eldest_guest_index = i;}}printf("%d\n", schoolmate_guest_amount);if (schoolmate_guest_amount > 0){printf("%s\n", guest_IDs[eldest_schoolmate_index]);} else {printf("%s\n", guest_IDs[eldest_guest_index]);}return 0;
}

相关内容

热门资讯

凭实力单身的小鬼王琳凯,最想开... 凭实力单身的小鬼王琳凯,最想开车带谁兜风?王子异。两个人从创造营开始关系就一直很好,最后两个人都成功...
世界上有没有姓老的人 世界上有没有姓老的人百家姓是有姓老的,现实生活当中还现存的。现实生活没遇到!!世界上各种稀奇古怪的姓...
吴奇隆演过哪些好看的电视剧? 吴奇隆演过哪些好看的电视剧?萧十一郎,冒险王, 蜀山战纪系列, 步步惊心 步步惊情 侠女闯天关 ,向...
人教版八年级上册科学重点知识归... 人教版八年级上册科学重点知识归纳科学书后面不是每个单元都有吗
我是个可爱型的小男生,脸有点胖... 我是个可爱型的小男生,脸有点胖,大眼睛,双眼皮。鼻子有点像猫。请问什么发型适合我?我的刘海比较厚,斜...
泉州开元寺是佛教还是道教 泉州开元寺是佛教还是道教佛教才称寺,,
自制鱼池过滤器制作方法 自制鱼池过滤器制作方法鱼池挖好以后,要进行找平找坡。很多鱼池底部都会采用平的方式制作,包括不规则鱼池...
性命关天是什么意思? 相由心生... 性命关天是什么意思? 相由心生是什么意思? 神马都是浮云是什么意思? 性命尤关是什么意思?性命关天是...
尹恩惠和朱智勋有演过什么电视剧... 尹恩惠和朱智勋有演过什么电视剧吗?请各位帮帮忙!那如果分开的话,各演了什么电视剧?合演的只有宫有《宫...
一女在微博上写了这么一句话,什... 一女在微博上写了这么一句话,什么情况?感觉?只要内心强大就不怕。说的很对,不随波逐流的人,不受他人左...
读职校怎么样?想学个技术,有没... 读职校怎么样?想学个技术,有没有前途?正规的学习技术渠道其中有:技校(职业学校)、中专、大专和大本,...
美国学前教育全国性课程标准的好... 美国学前教育全国性课程标准的好处美国学前教育全国性课程标准的好处如下:相较于我们国家的教育,美国的教...
奇迹 怪物等级资料 奇迹 怪物等级资料我要凑法魂玄灵套装,但是“法魂玄灵之铠”要146级的怪才掉,可是什么怪是146级以...
在周公解梦中搜不到,这是什么寓... 在周公解梦中搜不到,这是什么寓意梦见路、道路:梦中的路,通常象征生活道路,发展方向,或是事业发展历程...
发挥“近”的优势 做足“美”的... 对话人: 周珊珊 本报评论员 张 博 河北日报评论员 周珊珊:据统计,今年端午假期,河北全省接待游客...
原创 只... #只要四种材料就可以做出类似花生煎饼的好吃花生饼干! 在美食的世界里,往往简单的食材组合能碰撞出意...
原创 只... #只需在馅里多加一个东西,就能鲜香爆汁,一口气吃五笼 包子,那松软的外皮包裹着内馅,咬上一口,满满...
原创 可... #可可雪花酥,弥补一下今年没看到雪的受伤心灵 在这个本该银装素裹的时节,无雪的冬日总归少了几分韵味...
寒假在HBO上看到的一部电影,... 寒假在HBO上看到的一部电影,关于一个钢琴老师的故事,里面还有一个跟自己学生有点心动火花的片段!《生...
九州幻想,现今共有多少长短篇小... 九州幻想,现今共有多少长短篇小说?这么跟你说吧 其主要部分和其他作者所写的东西陆续发表了6年多了...