PTA基础编程题目集 7-34通讯录的录入与显示(C++语言实现)
摘要:本文是PTA编程题"通讯录的录入与显示"的题解,涵盖题目描述、输入输出格式及C++语言实现,展示结构体数组存储与索引查询的核心方法。
题目描述
通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。
本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。
输入格式:
输入在第一行给出正整数N(≤10);随后N行,每行按照格式姓名 生日 性别 固话 手机给出一条记录。其中姓名是不超过10个字符、不包含空格的非空字符串;生日按yyyy/mm/dd的格式给出年月日;性别用M表示"男"、F表示"女";固话和手机均为不超过15位的连续数字,前面有可能出现+。
在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N−1顺序编号)。数字间以空格分隔。
输出格式:
对每一条要查询的记录编号,在一行中按照姓名 固话 手机 性别 生日的格式输出该记录。若要查询的记录不存在,则输出Not Found。
输入样例:
3 Chris 1984/03/10 F +86181779452 13707010007 LaoLao 1967/11/30 F 057187951100 +8618618623333 QiaoLin 1980/01/01 M 84172333 10086 2 1 7输出样例:
LaoLao 057187951100 +8618618623333 F 1967/11/30 Not Found解题思路
核心问题分析
本题需要实现通讯录的录入与查询功能。核心要点有三:一是用合适的数据结构存储多条记录(包含姓名、生日、性别、固话、手机5个字段);二是按正确顺序输出字段(注意输出顺序与输入顺序不同:输入是姓名-生日-性别-固话-手机,输出是姓名-固话-手机-性别-生日);三是处理无效查询编号,输出Not Found。
算法原理说明
采用结构体数组+索引查询的方案:
- 数据结构设计:定义Contact结构体,包含5个字段分别存储一条记录的各项信息。
- 录入阶段:读取N后,循环N次按输入顺序读取5个字段存入结构体数组对应下标的元素。
- 查询阶段:读取K后,循环K次读取查询编号idx。若idx在[0, N)范围内,则按输出顺序读取并打印对应结构体的字段;否则输出"Not Found"。
- 时间复杂度O(N+K):录入和查询均为线性扫描
- 空间复杂度O(N):存储N条通讯录记录
具体计算步骤
- 读取正整数N(通讯录记录条数)
- 循环i从0到N-1:
- 依次读取姓名、生日、性别、固话、手机,存入contacts[i]的对应字段
- 读取正整数K(查询次数),随后读取K个查询编号
- 循环处理K个查询:
- 读取查询编号idx
- 判断idx >= 0 且 idx < N?
- 是:按"姓名 固话 手机 性别 生日"顺序输出
- 否:输出"Not Found"
代码流程说明
- 头文件引入:引入iostream和cstring头文件
- 定义结构体:typedef定义Contact结构体,包含name、birthday、gender、fixedPhone、mobilePhone五个字段
- 读取N:输入通讯录记录条数n
- 定义结构体数组:Contact contacts[10],最多容纳10条记录
- 录入N条记录:循环n次,每次用cin按顺序读取5个字段存入contacts[i]
- 读取K:输入查询次数k
- 处理K次查询:循环k次:
- 读取查询编号idx
- 判断idx是否在有效范围[0, n)内
- 有效则按指定顺序输出5个字段(注意固话手机在前,性别生日在后)
- 无效输出"Not Found"
- 程序结束:return 0
代码流程图
解题流程图
代码部分实现
#include<iostream>#include<cstring>usingnamespacestd;typedefstruct{charname[11];charbirthday[11];chargender;charfixedPhone[16];charmobilePhone[16];}Contact;intmain(){intn;cin>>n;Contact contacts[10];for(inti=0;i<n;i++){cin>>contacts[i].name>>contacts[i].birthday>>contacts[i].gender>>contacts[i].fixedPhone>>contacts[i].mobilePhone;}intk;cin>>k;for(inti=0;i<k;i++){intidx;cin>>idx;if(idx>=0&&idx<n){cout<<contacts[idx].name<<" "<<contacts[idx].fixedPhone<<" "<<contacts[idx].mobilePhone<<" "<<contacts[idx].gender<<" "<<contacts[idx].birthday<<endl;}else{cout<<"Not Found"<<endl;}}return0;}