ImageVerifierCode 换一换
格式:DOCX , 页数:45 ,大小:354.90KB ,
资源ID:6529071      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6529071.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(PTA 实验春.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

PTA 实验春.docx

1、PTA 实验春A. 装箱问题模拟(20) 2B. 表达式转换(25) 7C. 家谱处理(30) 19D. 航空公司VIP客户查询(25) 23E. 社交网络图中结点的“重要性”计算(30) 25F. 奥运排行榜(25) 29A. 装箱问题模拟(20)时间限制 400 ms内存限制 65536 kB代码长度限制 8000 B判题程序 Standard 假设有N项物品,大小分别为s1, s2, , si, , sN,其中si为满足1= si=100的整数。要把这些物品装入到容量为100的一批箱子(序号1N)中。装箱方法是:对每项物品, 顺序扫描箱子,把该物品放入足以能够容下它的第一个箱子中。请写一

2、个程序模拟这种装箱过程,并输出每个物品所在的箱子序号,以及放置全部物品所需的箱子数目。输入格式说明: 输入第1行给出物品个数N(=1000),第2行给出N个正整数si(1 = si = 100,表示第i项物品的大小)。输出格式说明: 按照输入顺序输出每个物品的大小及其所在的箱子序号,每个物品占1行,最后一行输出所需的箱子数目。样例输入与输出:序号输入输出1860 70 80 90 30 40 10 2060 170 280 390 430 140 510 120 2526100 90 80 70 60 50100 190 280 370 460 550 663122 11#includeusi

3、ng namespace std;int main() int N; cinN; int *No=new intN;/存放N个物品各自的大小 int *Box=new intN;/存放箱子的剩余容积,初始100 for(int i=0;itemp1; *(No+i)=temp1; *(Box+i)=100; int boxno=0;for(int ii=0;iiN;ii+)/循环这N个物品for (int j=0;j=0)/判断当前箱子(剩余的容积)是否能够存放第ii+1个物品 cout *(No+ii) j+1endl; if(boxno(j+1)boxno=j+1;/返回最终用到的箱子序号

4、 ,即需要的箱子个数。 *(Box+j)=*(Box+j)-*(No+ii);/记下当前箱子存放完毕后剩余的容积 break;/跳出对当前箱子的循环检查,继续下一个物品 /不能存放则检查下一个箱子。cout boxno endl;delete No;delete Box; return 0;B. 表达式转换(25)时间限制 400 ms内存限制 65536 kB代码长度限制 8000 B判题程序 Standard 算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。输入格式说明: 输

5、入在一行中给出不含空格的中缀表达式,可包含+、-、*、以及左右括号(),表达式不超过20个字符。输出格式说明: 在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。样例输入与输出:序号输入输出12+3*(7-4)+8/42 3 7 4 - * + 8 4 / +2(2+3)*4-(8+2)/52 3 + 4 * 8 2 + - 5 /31314+25.5*121314 25.5 12 * +4-2*(+3)-2 3 *5123123#include #include #include #include using namespace std;b

6、ool isOper(char c)/判断是否为操作符if (c= +)|(c= -)|(c= *)|(c= /)|(c= ()|(c=)return true;return false;bool isHigh(char top_op,char InfixExp_op)/判断操作符的优先级/top_op为栈顶操作符/InfixExp_op为当前读入操作符/如果栈顶操作符优先级高,则弹出栈顶操作符/如果栈顶操作符优先级低,则压入当前读入操作符if (top_op= +)&(InfixExp_op= +) return true;if (top_op= +)&(InfixExp_op= -) re

7、turn true;if (top_op= -)&(InfixExp_op= +) return true;if (top_op= -)&(InfixExp_op= -) return true;if (top_op= *)&(InfixExp_op= +) return true;if (top_op= *)&(InfixExp_op= -) return true;if (top_op= *)&(InfixExp_op= *) return true;if (top_op= *)&(InfixExp_op= /) return true;if (top_op= /)&(InfixExp_o

8、p= +) return true;if (top_op= /)&(InfixExp_op= -) return true;if (top_op= /)&(InfixExp_op= *) return true;if (top_op= /)&(InfixExp_op= /) return true;if (InfixExp_op= ) return true;return false;void input(vector *InfixExp)char c;cin c;while(c!=n)/判断回车结束输入InfixExp-push_back(c);cin.get(c);/void output

9、(vector *postfixExp)/输出原表达式/vector :iterator postfixExp_it;/后缀表达式迭代器/for(postfixExp_it=postfixExp- begin();postfixExp_it!=postfixExp- end();postfixExp_it+)/ if (isOper(*postfixExp_it)cout *postfixExp_it ;/ else cout *postfixExp_it ;/cout endl;/void output2(vector *postfixExp)/不输出括号/如果表达式中括号不配对/则可能有多

10、余的括号未弹出vector :iterator postfixExp_it;/后缀表达式迭代器for(postfixExp_it=postfixExp- begin();postfixExp_it!=postfixExp- end();postfixExp_it+)if (*postfixExp_it!= ()&(*postfixExp_it!= )if (isOper(*postfixExp_it)cout *postfixExp_it ;else cout *postfixExp_it ;cout endl;int main()stack mystack;vector InfixExp;/

11、中缀表达式vector :iterator InfixExp_it;/中缀表达式迭代器vector postfixExp;/后缀表达式/do /cout 请输入一个表达式,回车结束输入。 endl;cout endl;input(&InfixExp);/output(&InfixExp);/输入表达式for(InfixExp_it=InfixExp.begin();InfixExp_it!=InfixExp.end();InfixExp_it+)if (!isOper(*InfixExp_it)/操作数,直接输出postfixExp.push_back(*InfixExp_it);else/操

12、作符 postfixExp.push_back( );/区分数字用的空格if (mystack.empty()/栈为空,压入操作符mystack.push(*InfixExp_it);else if(isHigh(mystack.top(),*InfixExp_it)/栈顶操作符优先,比如栈顶为*,当前操作符为+,则弹出*if (*InfixExp_it!= )/非闭括号/弹出栈中操作符直到栈顶操作数优先级低于当前读入操作数/压入当前读入操作符dopostfixExp.push_back(mystack.top();mystack.pop();while(!mystack.empty()&(i

13、sHigh(mystack.top(),*InfixExp_it);mystack.push(*InfixExp_it);else/闭括号while(!mystack.empty()&(mystack.top()!= ()/弹出直到开括号postfixExp.push_back(mystack.top();mystack.pop();if (!mystack.empty()&(mystack.top()= ()mystack.pop();/弹出开括号else if(!isHigh(mystack.top(),*InfixExp_it)/中缀表达式中操作符优先/比如栈顶为+,而当前读入*myst

14、ack.push(*InfixExp_it);/压入当前读入操作符while(!mystack.empty()/把栈中剩余的操作符依次弹出postfixExp.push_back(mystack.top();mystack.pop();output2(&postfixExp);while(!mystack.empty()mystack.pop();InfixExp.clear();postfixExp.clear();/清空栈、中缀表达式和后缀表达式/while(true);return 0;带符号的数字运算有误噢。另:本地测试能过,PAT单机版也能过,网络版里通不过。修正版,能通过PAT,测

15、试可用。PS:这个是网上下载的,下载地址附上#include#include#includeusing namespace std;stack s;int Judge(char a) if(a=+)|(a=-)|(a=*)|(a=/)|(a=()|(a=) return 1; return 0;int Judge_(char b,char a) if(b=+|b=-) if(a=+)|(a=-)|(a=*)|(a=/)|(a=() return 1; return 0;int Judge_jjcc(char a) if(a=+)|(a=-)|(a=*)|(a=/) return 1; retu

16、rn 0;int Judge_jj(char a) if(a=+)|(a=-) return 1; return 0;int premer(char a,char b) switch(a) case +: switch(b) case +:return 0;break; case -:return 0;break; case *:return 0;break; case /:return 0;break; case (:return 0;break; break; case-: switch(b) case +:return 0;break; case -:return 0;break; ca

17、se *:return 0;break; case /:return 0;break; case (:return 0;break; break; case *: switch(b) case +:return 1;break; case -:return 1;break; case *:return 0;break; case /:return 0;break; case (:return 0;break; break; case/: switch(b) case +:return 1;break; case -:return 1;break; case *:return 0;break;

18、case /:return 0;break; case (:return 0;break; break; case(: switch(b) case +:return 0;break; case -:return 0;break; case *:return 0;break; case /:return 0;break; case (:return 0;break; break; default:break; int main() char a30; scanf(%s,a); int len=strlen(a); int con_flag=0; int op_flag=1; bool firs

19、t=false; for(int i=0;ilen;i+) if(Judge(ai)&(!(i=0&Judge_jj(ai)&(!Judge_(ai,ai-1) /正常符号 if(ai=) while(s.top()!=() char temp=s.top(); s.pop(); cout temp; s.pop(); while(!s.empty()&s.top()!=() char temp_t=s.top(); s.pop(); cout temp_t; else if(!s.empty()&(ai!=() if(premer(s.top(),ai) con_flag=1; else c

20、on_flag=0; while(con_flag)/压入的操作符优先级要大于顶部元素 char temp2=s.top(); cout temp2; s.pop(); if(!s.empty() if(premer(s.top(),ai) con_flag=1; else con_flag=0; else con_flag=0; s.push(ai); else s.push(ai); if(first=false&Judge_jjcc(ai) first=true; cout ; else if(ai=+|ai=-)/表示数据的正负 if(ai=-) op_flag*=-1; /是-号 后

21、面的数字乘以-1; /否则忽略 first=true; else if(i=0) coutai; else if(op_flag=-1) cout-ai; op_flag=1; else coutai; first=false;/遇到数字 while(!s.empty() cout s.top(); s.pop(); /printf(%s,a); system(pause); return 0;另外再提供一个,未经测试的,代码就不贴了,自己下载测试。,C. 家谱处理(30)时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard人类学研究对于家族很感兴趣,于

22、是研究人员搜集了一些家族的家谱进行研究。实验中,使用计算机处理家谱。为了实现这个目的,研究人员将家谱转换为文本文件。下面为家谱文本文件的实例:John Robert Frank Andrew Nancy David家谱文本文件中,每一行包含一个人的名字。第一行中的名字是这个家族最早的祖先。家谱仅包含最早祖先的后代,而他们的丈夫或妻子不出现在家谱中。每个人的子女比父母多缩进2个空格。以上述家谱文本文件为例,John这个家族最早的祖先,他有两个子女Robert和Nancy,Robert有两个子女Frank和Andrew,Nancy只有一个子女David。在实验中,研究人员还收集了家庭文件,并提取了

23、家谱中有关两个人关系的陈述语句。下面为家谱中关系的陈述语句实例:John is the parent of RobertRobert is a sibling of NancyDavid is a descendant of Robert研究人员需要判断每个陈述语句是真还是假,请编写程序帮助研究人员判断。输入格式说明:输入首先给出2个正整数N(2=N=100)和M(=100),其中N为家谱中名字的数量,M为家谱中陈述语句的数量,输入的每行不超过70个字符。名字的字符串由不超过10个英文字母组成。在家谱中的第一行给出的名字前没有缩进空格。家谱中的其他名字至少缩进2个空格,即他们是家谱中最早祖先(

24、第一行给出的名字)的后代,且如果家谱中一个名字前缩进k个空格,则下一行中名字至多缩进k+2个空格。在一个家谱中同样的名字不会出现两次,且家谱中没有出现的名字不会出现在陈述语句中。每句陈述语句格式如下,其中X和Y为家谱中的不同名字:X is a child of YX is the parent of YX is a sibling of YX is a descendant of YX is an ancestor of Y输出格式说明:对于测试用例中的每句陈述语句,在一行中输出True,如果陈述为真,或False,如果陈述为假。样例输入与输出:序号输入输出16 5John Robert Fr

25、ank Andrew Nancy DavidRobert is a child of JohnRobert is an ancestor of AndrewRobert is a sibling of NancyNancy is the parent of FrankJohn is a descendant of AndrewTrueTrueTrueFalseFalse22 1abc abcdefghijabcdefghij is a child of abcTrue34 5A B C DA is a child of DD is the parent of CC is a sibling of BD is a descendant of BB is an ancestor of CFalseFalseFalseTrueTrue# 家谱处理 PAT4-05. 家谱处理-1#include#include#include#include#includeusing namespace std;struct node string name; int level,pre; node() node(string s,int a,int b):pre(b),level(a),name(s);dequedequetr(101);unordered_map

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1